SQL 字符串分隔函数

查询某个 逗号分隔的字段

 select *   from AccInformation a where '启用' in( select * from dbo.fnSplitStr(cCaption,','))
 select * from  dbo.fnSplitStr('1,2,3',',')
CREATE FUNCTION [dbo].[fnSplitStr] (
    @sText      NVARCHAR(Max),
    @sDelim     CHAR(1)
)

RETURNS @retArray TABLE (
    value   VARCHAR(100)
)
AS
BEGIN
    DECLARE 
        @posStart        BIGINT,
        @posNext        BIGINT,
        @valLen            BIGINT,
        @sValue            NVARCHAR(100);

    IF @sDelim IS NULL 
    BEGIN
        IF LEN(@sText)>100 SET @sText = SUBSTRING(@sText, 1, 100)
        
        INSERT @retArray (value)
        VALUES (@sText);
    END
    ELSE
    BEGIN
        SET @posStart = 1;

        WHILE @posStart <= LEN(@sText)
        BEGIN
            SET @posNext = CHARINDEX(@sDelim, @sText, @posStart);

            IF @posNext <= 0 
                SET @valLen = LEN(@sText) - @posStart + 1;
            ELSE
                SET @valLen = @posNext - @posStart;

            SET @sValue = SUBSTRING(@sText, @posStart, @valLen);
            SET @posStart = @posStart + @valLen + 1;

            IF LEN(@sValue) > 0
            BEGIN
                IF LEN(@sValue)>100 SET @sValue = SUBSTRING(@sValue, 1, 100)
                
                INSERT @retArray (value)
                VALUES (@sValue);
            END
        END
    END
    RETURN
END

可能报错  

不是可识别的表提示选项。如果它要作为表值函数或 CHANGETABLE 函数的参数,请确保您的数据库兼容模式设置为 90。

错误原因:
兼容性不足

解决方法:
选中指定数据库->右键选择“属性”->选项->兼容性级别->选择 SQL Server 2005(90)

原文地址:https://www.cnblogs.com/su-king/p/13433006.html