带逗号分隔的字段值判断是否匹配

如果数据表中一个字段的值是【‘2345’,‘23’】这样的,如果判断是否存在,用like 会匹配多个。

使用splitTotable函数可以精确匹配到某个值


select * from tbids where (
select count(1) from  fun_SplitStrToTable(ids,',') a 
where a.col='23')>0
Create FUNCTION [fun_SplitStrToTable]
        (
          @s VARCHAR(max) ,  --待拆分的字符串
          @split VARCHAR(10)  --分隔符
        )
    RETURNS @re TABLE ( xh INT, col VARCHAR(100) )
    AS
    BEGIN
    --根据字符串中的分隔符分割字符串
    --创建分拆处理的辅助表(用户定义函数中只能操作表变量)
        DECLARE @t TABLE ( ID INT IDENTITY, b BIT )
        DECLARE @re1 TABLE ( xh INT, col VARCHAR(100) )
        INSERT  @t
                ( b )
                SELECT TOP 8000
                        0
                FROM    syscolumns a ,
                        syscolumns b
        INSERT  @re1
                SELECT  ID ,
                        SUBSTRING(@s, ID,
                                    CHARINDEX(@split, @s + @split, ID) - ID)
                FROM    @t
                WHERE   ID <= LEN(@s + 'a')
                        AND CHARINDEX(@split, @split + @s, ID) = ID
        INSERT  INTO @re
                SELECT  ROW_NUMBER() OVER ( ORDER BY xh ) xh ,
                        col
                FROM    @re1
        RETURN
    END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值