版权声明:
尊重知识产权,严厉打击非法采集。
MSSQL 数据库中没有Split 函数,有时候我们需要在数据库中解析类似于 A,B,C,D 这样有规则的分隔符的字符串。
可以写个自定义Split 表值函数:
---- =============================================
---- Author: hooyes
---- Create date: 2013-07-05
---- Update date: 2013-07-05
---- Description: 字符串分割函数
---- =============================================
CREATE FUNCTION [dbo].[split]
(
@Str VARCHAR(8000) ,
@Separator VARCHAR(10)
)
RETURNS @returntable TABLE
(
id INT IDENTITY(1, 1) ,
value VARCHAR(500)
)
AS
BEGIN
DECLARE @i INT
SET @Str = RTRIM(LTRIM(@Str))
SET @i = CHARINDEX(@Separator, @Str)
WHILE @i >= 1
BEGIN
INSERT @returntable
VALUES ( LEFT(@Str, @i - 1) )
SET @Str = SUBSTRING(@Str, @i + 1, LEN(@Str) - @i)
SET @i = CHARINDEX(@Separator, @Str)
END
IF @Str <> '\'
BEGIN
INSERT @returntable
VALUES ( @Str )
END
RETURN
END
在数据库中创建完这个自定义的表值函数后,我们就可以使用啦。
SELECT *
FROM dbo.split('apple,banana,coco,hooyes', ',')
-- result
/*
id value
----------- -----------------------
1 apple
2 banana
3 coco
4 hooyes
*/
SELECT id ,
value
FROM dbo.split('apple;banana;coco;hooyes', ';')
WHERE value = 'hooyes'
-- result
/*
id value
----------- --------------------------
4 hooyes
*/
2018年11月29日 更新:
从SQL Server 2016版本起,数据库开始内置了STRING_SPLIT函数,终于内置了字符串分割函数,使用方法跟我写的函数一样。
语法如下:
STRING_SPLIT ( string , separator )
分隔符可以自定义,可用逗号也可用空格例如:
SELECT value FROM STRING_SPLIT('apple banana coco hooyes', ' ');
更多关于STRING_SPLIT的介绍请查看docs.microsoft.com
$ welcome to hooyes.net
[INFO] ------------------------------o-
[INFO] Author : HOOYES
[INFO] Site : https://hooyes.net
[INFO] Page : https://hooyes.net/p/sql-split
[INFO] Last build : 2023-07-31 09:16:20 +0000
[INFO] -0------------------------------
下一篇 中国身份证正则表达式