其实,以前有类似如下的表结构:NAME INPUTCODE1 INPUTCODE2 INPUTCODE3
==================================
大白菜 dbc bc 101
西红柿 bhs YSZ 102
黄瓜 hg
青椒 qj lj 那么当按“b”为关键字检索时,构造的SELECT语句是:
select name from table1 where inputcode1 like 'b%' or inputcode2 like 'b%' or inputcode3 like 'b%'现在因为没有办法修改表结构,只好把原来的三个字段合并为一个字段处理,但是不知道该如何检索。请指教,谢谢了先。

解决方案 »

  1.   

    参考了http://community.csdn.net/Expert/topic/4598/4598667.xml?temp=.840542这个帖子,查阅CHARINDEX时,发现用PATINDEX可以解决这个问题;如下:
    select * from opr.gbcodes where patindex('%b%', inputcode)<>0不知道有没有其它的办法?
      

  2.   

    select * from tb
    where charindex(',b',','+inputcode)>0
      

  3.   

    select * from tb 
    where charindex('b',left(INPUTCODE,charindex(',',INPUTCODE)-1))<>0
      

  4.   

    select * from OPR.GBCODES where CHARINDEX(',汉字测试',','+ABSTRACT)>0
    按照wgsasd311的方法测试通过;lsqkeke,你这个LEFT函数好像有点问题了,提示“向 substring 函数传递了无效的 length 参数”了。
      

  5.   

    对比wgsasd311的CHARINDEX函数和俺自己的PATINDEX函数后,俺发现 patindex('%b%', inputcode)这种用法,检索结果不准确;因为它没有有效的区分出“,”分隔符号来。
      

  6.   

    我测试都没错的:declare @t table(NAME varchar(10), INPUTCODE varchar(50))
    insert @t
    select '大白菜', 'dbc,bc,101 ' union all
    select '西红柿', 'bhs,YSZ,102' union all 
    select '黄瓜', 'hg,,' union all
    select '青椒', 'qj,,lj'
    select * from @t
    where charindex('b',left(INPUTCODE,charindex(',',INPUTCODE)-1))<>0结果:
    大白菜 dbc,bc,101
    西红柿 bhs,YSZ,102
      

  7.   

    declare @t table(NAME varchar(10), INPUTCODE varchar(50))
    insert @t
    select '大白菜', 'dac,bc,101 ' union all
    select '西红柿', 'bhs,YSZ,102' union all 
    select '黄瓜', 'hg,,' union all
    select '青椒', 'qj,,lj'
    select * from @t
    where charindex('b', left(INPUTCODE, charindex(',', INPUTCODE)-1))<>0
    =====
    lsqkeke,你这个检索,只是对第一个“,”分隔号前的内容进行了检索;比如我修改成上面的测试数据后,就没有检索出【'大白菜', 'dac,bc,101'】这条记录来。
      

  8.   

    就时在INPUTCODE中存在“b”打头的输入码。
    -----------------------------
    你这句话的说明有歧义,所以我理解成:只是第一部分并且以b开头的
      

  9.   

    呵呵,汗自己一个先。因为以前的表中会存在3个INPUTCODE,但是现在的表结构已经定了,没有办法修改;所以就把3个INPUTCODE写到一个字段里,用“,”分隔了。但是检索的目的和要求没有变;只要三个检索码任意一个符合就应该检索出来。
      

  10.   

    select * from yourtable where charindex(',b',','+INPUTCODE)>0