我相信大部分人都碰到过,处理数据的时候,字段的值是以 ',' (逗号)分隔的形式,所以我也不能避免。

然后我才知道,sql 是没有类似于 C# 和 Javascript 这种分割字符串的方法。( Split )

所以我自己定义了一个 sql 函数(多声明表值函数),代码如下:

 USE [Test]
GO
/****** Object: UserDefinedFunction [dbo].[Split] Script Date: 2017/4/14 23:04:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=',',@string NVARCHAR(max))
RETURNS @ResultTab TABLE (
Id INT ,
Res NVARCHAR(500)
)
AS
BEGIN
DECLARE @Num INT IF(@string IS NOT NULL AND @string <> '' AND LEN(@string)>0)
BEGIN
IF(CHARINDEX(@separator,@string)>0) --判断要截取的字符是否存在
BEGIN
SET @Num=0
WHILE (CHARINDEX(@separator,@string)>0) --如果要截取的字符存在,就继续循环
BEGIN
SET @Num=@Num+1 INSERT INTO @ResultTab(Id,Res) --截取字符串,插入表变量
SELECT @Num,LEFT(@string,CHARINDEX(@separator,@string)-1) --把已经截取并插入的字符串删除
SET @string=STUFF(@string,1,CHARINDEX(@separator,@string)-1+LEN(@separator),'')
END --如果最后一个截取的字符串为空,那就不插入了
--例如:'123,456,789,' 这样的字符串最后剩下的就是空字符串了
IF(@string IS NOT NULL AND @string <> '')
BEGIN
INSERT INTO @ResultTab(Id,Res)
SELECT @Num+1,@string
END
END
ELSE
BEGIN
DELETE FROM @ResultTab
END
END
ELSE
BEGIN
DELETE FROM @ResultTab
END
RETURN
END

下面来调用一下试试效果:

 --因为这个函数创建的时候默认为以 逗号 分割,所以只需要使用 default 关键字就可以了
select * from Split(default,'123,456,789') select * from Split(default,'123,456,789,') --下面试试其它字符分割
select * from Split('abc','11111abc22222abc33333') select * from Split('abc','11111abc22222abc33333abc')

不足的地方就是不能直接作用于表,和不能同时支持多字符分割。

当然,如果多定义几个参数,也是勉强可以的,不过我想的是能够和 C# 那种可以传入一个分割字符的数组,不过貌似 sql 自定义函数的参数不支持 table 类型。

另外,如果有什么好的想法,可以探讨一下。多谢~

SQL Server自定义字符串分割函数——Split的更多相关文章

  1. SQL Server 自定义字符串分割函数

    一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果(标量值函数)   create function Func_StrArrayL ...

  2. JavaScript中字符串分割函数split用法实例

    这篇文章主要介绍了JavaScript中字符串分割函数split用法,实例分析了javascript中split函数操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了JavaSc ...

  3. C++常见问题: 字符串分割函数 split

    C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速分割这个问题了.列几个常用方法以备不时之需. 方法一: 利用STL自己实现split 函数(常用,简 ...

  4. Delphi 自带的字符串分割函数split

    下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSy ...

  5. (转)C++常见问题: 字符串分割函数 split

    http://www.cnblogs.com/dfcao/p/cpp-FAQ-split.html C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速 ...

  6. sql server 将字符串分割成表函数 strsplitetotable

    在sql server里,调用存储过程时,经常需要将数据拼成字符串做为参数调用存储过程,而在储存过程中分割字符串虽然简单但麻烦,封装了该函数,可以将拼串分割成内存表返回,方便使用,返回的表字段从a,b ...

  7. sqlserver 自定义字符串分割函数.

    --SQL Server Split函数 --Author: sq --说明:被分割后的字段为:short_str --支持分割符多字节 --使用方法 --Select * FROM splits(' ...

  8. sql server 数据字符串替换函数

    sql server 替换函数 replace 函数参数 REPLACE(string_expression, string_pattern, string_replacement) 1.string ...

  9. C++之字符串分割函数split

    c++之字符串分割: /* *c++之字符串分割: */ #include <iostream> #include <string> #include <vector&g ...

随机推荐

  1. remote指令添加远程数据库

    git remote add <name> <url> git remote add origin https://[your_space_id].backlogtool.co ...

  2. iframe超时处理。。。。

    function iframeTimeOut(url, timeOut_callback, width, height) { /// <summary> /// iframe超时处理 // ...

  3. vector使用注意事项

    1. 需要保存若干同类数据项时,用vector比较方便.不用管理下标,直接push_back即可. 2. 当程序重复执行一段代码时,之前保存数据用的vector需要清空.因为不是按照下标保存的数据,不 ...

  4. SHGetSpecialFolderPath用法

    The SHGetSpecialFolderPath function retrieves the path of a special folder that is identified by its ...

  5. C++关键字之explicit(显式)

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  6. 打打基础,回头看看avr单片机的定时器、中断和PWM(转)

    以前小看了定时器,发现这东西还真的很讲究,那先复习复习吧. 先提提中断:我的理解就是cpu执行时,遇到中断——根据对应的中断源(硬件或软件)——pc定位中断入口地址,然后根据这里的函数指针——跳转到相 ...

  7. U盘插入拔出提示

    Unit Unit1; Interface Uses Windows, Messages, SysUtils, Variants, classes, Graphics, Controls, Forms ...

  8. PHP 开发环境的搭建和使用02--整合让apache处理php

    PHP5.3.5直接下载解压即可.但是怎样才能让apache处理php呢? 1/  在apache 的conf目录下 的 httpd.conf(用于指定apache的设置)加入如下代码:   Load ...

  9. [C++] 跨平台的生成GUID方法

    string GetGUID() { char szGUID[BUFF_SIZE]; #ifdef WIN32 GUID uuid; CoCreateGuid(&uuid); #else Tm ...

  10. PAT 甲级 1020 Tree Traversals (二叉树遍历)

    1020. Tree Traversals (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Suppo ...