我在数据库中有一个逗号分隔的字符串.如 苹果、香蕉、菠萝、葡萄 我需要在逗号的基础上拆分这个字符串,然后遍历它,因为SQL SERVER中没有内置函数,有没有什么有效的方法可以达到这个目的呢?

推荐答案

try 此功能

CREATE FUNCTION [dbo].[func_Split] 
    (   
    @DelimitedString    varchar(8000),
    @Delimiter              varchar(100) 
    )
RETURNS @tblArray TABLE
    (
    ElementID   int IDENTITY(1,1),  -- Array index
    Element     varchar(1000)               -- Array element contents
    )
AS
BEGIN

    -- Local Variable Declarations
    -- ---------------------------
    DECLARE @Index      smallint,
                    @Start      smallint,
                    @DelSize    smallint

    SET @DelSize = LEN(@Delimiter)

    -- Loop through source string and add elements to destination table array
    -- ----------------------------------------------------------------------
    WHILE LEN(@DelimitedString) > 0
    BEGIN

        SET @Index = CHARINDEX(@Delimiter, @DelimitedString)

        IF @Index = 0
            BEGIN

                INSERT INTO
                    @tblArray 
                    (Element)
                VALUES
                    (LTRIM(RTRIM(@DelimitedString)))

                BREAK
            END
        ELSE
            BEGIN

                INSERT INTO
                    @tblArray 
                    (Element)
                VALUES
                    (LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1))))

                SET @Start = @Index + @DelSize
                SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1)

            END
    END

    RETURN
END

Example Usage–只需向函数传递逗号分隔的字符串以及所需的分隔符.

DECLARE @SQLStr varchar(100)
SELECT @SQLStr = 'Mickey Mouse, Goofy, Donald Duck, Pluto, Minnie Mouse'

SELECT
    *
FROM
    dbo.func_split(@SQLStr, ',')

结果会是这样

Result

Database相关问答推荐

MongoDB 中的 OVER PARTITION 类似功能

如何将初始数据放入数据库

什么是 CREATE VIEW IF NOT EXISTS in postgresql

MYSQL CASE 语句多条件

在sql server中拆分字符串

如何打印出 sequelize 实例的表名?

TSQL - 表值函数中的 If..Else 语句 - 无法通过

为什么数据库索引使用平衡树,而不是哈希表?

Neo4j:逐步创建自动索引

归档实时 MySQL 数据库的最佳方式

执行语句还是运行脚本?

使用 JSON 作为存储/传输格式的数据库

如何在一行中显示 redis 中的所有键?

MySQL 错误 - #1062 - Duplicate entry ' ' for key 2

SQL - 如何转置?

为什么负 id 或零被认为是不好的做法?

如何在 MySQL 中清理或调整 ibtmp1 文件的大小?

从数据库中获取事件

我将如何为读写操作实现单独的数据库?

DBMS中数据模型和数据库模式的区别?