hooyes 灵感纵容非凡

SQL 数据库中实现Split 字符串分割

2013-07-05
hooyes

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

*/

Content
TOP