表名:Js_Xmwsjl
表中字段有ID,gcsgdw两字段其中gcsgdw是一串格式如下的字符串:*!*[数字]#!#[要进行匹配的字符串]*!*[数字]#!#[要进行匹配的字符串].....例如:一、
*!*1#!#自动消防设施工程设计单位*!*11#!#建筑工程设计单位:JS*!*2#!#自动消防设施工程设计单位*!*11#!#建筑工程设计单位:JS二、
*!*2#!#自动消防设施工程设计11111单位*!*11#!#建筑工程设计单位:JS三、
*!*2#!#自动消防设施工程设计单位*!*11#!#建筑工程设计单位:JS
要求:
从中找出[要进行匹配的字符串]中包含有指定[数字]的行
如从上例中找到匹配[1]的行,即找到第二行:*!*10#!#自动消防设施工程设计11111单位*!*11#!#建筑工程设计单位:JS问SQL如何编写?

解决方案 »

  1.   

    就是当匹配数字时不要把*!*1#!#这一行算进去。1只去匹配[要进行匹配的字符串]是否含有该字符串,而不要去匹配*!*[数字]#!#,能否想办法替换掉,比如匹配中文或英文字符时用
    Replace(gcsgdw,'字符','') like '%字符%'
    但当匹配数字时有前面*!*[数字]#!#的干扰!
      

  2.   

    select * from Js_Xmwsjl where charindex('1',gcsgdw)>0
    或者
    select * from Js_Xmwsjl where PATINDEX ( '%1%' , gcsgdw)>0
      

  3.   

    使用 PATINDEX,模式是可以包含通配符的字面字符串:
    select * from Js_Xmwsjl where PATINDEX ( '%1%' , gcsgdw)>0.
    使用 CHARINDEX,模式是字面字符串(不能包含通配符):
    select * from Js_Xmwsjl where charindex('1',gcsgdw)>0
      

  4.   

    谢谢两位
    select * from Js_Xmwsjl where PATINDEX('%1[^*!*%1%#!#]%', gcsgdw)>0 or PATINDEX('%[^*!*%1%#!#]1%', gcsgdw)>0
    这样子应该可以了
      

  5.   

    哈,应该为这个
    select * from Js_Xmwsjl where PATINDEX(%[^*!*%1%#!#]1%[^*!*%1%#!#]%, gcsgdw)>0
      

  6.   

    哈,应该为这个
    select * from Js_Xmwsjl where PATINDEX(%[^*!*%1%#!#]1%[^*!*%1%#!#]%, gcsgdw)>0
    -----------------
    貌似於LZ給的,邏輯不完全相同喔~~
    不妨insert 一條紀錄看看:*!*212#!#同同同同*!*221#!#同同同同*!*221#!#同同同同*!*21#!#同同同同
      

  7.   

    將 %1% 改成 0-9,貌似差不多...select * from Js_Xmwsjl
    where patIndex(%[^*!*0-9#!#]1%[^*!*0-9#!#]%,gcsgdw)>0