SQL Server自定义字符串分割函数——Split
我相信大部分人都碰到过,处理数据的时候,字段的值是以 ',' (逗号)分隔的形式,所以我也不能避免。
然后我才知道,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的更多相关文章
- SQL Server 自定义字符串分割函数
一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果(标量值函数) create function Func_StrArrayL ...
- JavaScript中字符串分割函数split用法实例
这篇文章主要介绍了JavaScript中字符串分割函数split用法,实例分析了javascript中split函数操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了JavaSc ...
- C++常见问题: 字符串分割函数 split
C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速分割这个问题了.列几个常用方法以备不时之需. 方法一: 利用STL自己实现split 函数(常用,简 ...
- Delphi 自带的字符串分割函数split
下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSy ...
- (转)C++常见问题: 字符串分割函数 split
http://www.cnblogs.com/dfcao/p/cpp-FAQ-split.html C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速 ...
- sql server 将字符串分割成表函数 strsplitetotable
在sql server里,调用存储过程时,经常需要将数据拼成字符串做为参数调用存储过程,而在储存过程中分割字符串虽然简单但麻烦,封装了该函数,可以将拼串分割成内存表返回,方便使用,返回的表字段从a,b ...
- sqlserver 自定义字符串分割函数.
--SQL Server Split函数 --Author: sq --说明:被分割后的字段为:short_str --支持分割符多字节 --使用方法 --Select * FROM splits(' ...
- sql server 数据字符串替换函数
sql server 替换函数 replace 函数参数 REPLACE(string_expression, string_pattern, string_replacement) 1.string ...
- C++之字符串分割函数split
c++之字符串分割: /* *c++之字符串分割: */ #include <iostream> #include <string> #include <vector&g ...
随机推荐
- java中不用BigInteger实现超大整数的乘法操作
昨天看到一个题目:计算1234!,不能用BigInteger类 众所周知阶乘的数据会非常大,经常使用的int和long型根本不够用.一般想到的仅仅有BigInteger类,可是题目中明白说了不能用,所 ...
- PyQt5资料
http://bbs.fishc.com/thread-59816-1-1.html https://pypi.python.org/pypi/PyQt5/ http://www.thehackeru ...
- 关于Animator状态在运行时的正负方向播放
如果直接在脚本里改播放速度,会报出如下警告: 之前没有很好的解决方法,但根据评论里的新方法,我试了下,可以控制播放正负方向了:
- java基础---->Java中异常的使用(一)
今天我们大致学习一下java中关于异常的知识.原来忍住一段时间不联系一个人,真的就不想联系了. java异常的使用 一.java异常的一些说明 .Throwable 类是Java 语言中所有错误或异常 ...
- 纯CSS序列号
per-Css-ol .ol { cursor:pointer; list-style-type: none; counter-reset: sectioncounter; } .ol li:befo ...
- 160530、memcached集群(spring集成的配置)
第一步:在linux机或windows机上安装memcached服务端(server) linux中安装memcached:centos中命令 yum -y install memcached 如果没 ...
- 原生封装的ajax
原生封装的ajax的代码如下: //将数据转换成 a=1&b=2格式; function json2url(json){ var arr = []; //加随机数防止缓存; json.t = ...
- Python全栈day21-22-23(模块)
一,python的模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...
- CodeForces 732C Sanatorium
C. Sanatorium time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- sersync+rsync原理及部署
标签:sersync+rsync部署文档 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liubao0312.blog.51ct ...