zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    bzoj 1103
    [POI] 大都市meg
    [Luogu] 网络
    [Luogu] 1600
    [Luogu] 树状数组
    [Luogu] 软件包管理器
    [Luogu] 遥远的国度
    [USACO5.5] 矩形周长Picture
    [Luogu] 魔板
    【NOIP2015】斗地主
  • 原文地址:https://www.cnblogs.com/su-king/p/13433006.html
Copyright © 2011-2022 走看看