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
*/