hooyes

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

|2013-07-05

版权声明:
尊重知识产权,严厉打击非法采集。
《SQL 数据库中实现Split 字符串分割》由 HOOYES 原创, HOOYES 保留一切权利。
原文地址:https://hooyes.net/p/sql-split
请尊重原创,本文原文地址:https://hooyes.net/p/sql-split

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------------------------------
原文地址:https://hooyes.net/p/sql-split
原文地址:https://hooyes.net/p/sql-split
Content
...
TOP