请教:在同一个字段上进行多个关键字检索。

老汉 2006-03-09 04:41:43
有如下的一个表结构:

NAME INPUTCODE
=================
大白菜 dbc,bc,101
西红柿 bhs,YSZ,102
黄瓜 hg,,
青椒 qj,,lj

现在,当我按照关键字为“b”检索时,我希望检索到如下的两条记录,就时在INPUTCODE中存在“b”打头的输入码。
大白菜 dbc,bc,101
西红柿 bhs,YSZ,102

不知道表达的是否清楚,请打家给些思路。



...全文
110 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mislrb 2006-03-09
select * from yourtable where charindex(',b',','+INPUTCODE)>0
回复
老汉 2006-03-09
呵呵,汗自己一个先。

因为以前的表中会存在3个INPUTCODE,但是现在的表结构已经定了,没有办法修改;所以就把3个INPUTCODE写到一个字段里,用“,”分隔了。但是检索的目的和要求没有变;只要三个检索码任意一个符合就应该检索出来。
回复
lsqkeke 2006-03-09
就时在INPUTCODE中存在“b”打头的输入码。
-----------------------------
你这句话的说明有歧义,所以我理解成:只是第一部分并且以b开头的
回复
老汉 2006-03-09
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'】这条记录来。
回复
lsqkeke 2006-03-09
即使你在某个','的后面加上字符'b',也可以得到这个结果!
回复
lsqkeke 2006-03-09
我测试都没错的:

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
回复
老汉 2006-03-09
对比wgsasd311的CHARINDEX函数和俺自己的PATINDEX函数后,俺发现 patindex('%b%', inputcode)这种用法,检索结果不准确;因为它没有有效的区分出“,”分隔符号来。
回复
老汉 2006-03-09
select * from OPR.GBCODES where CHARINDEX(',汉字测试',','+ABSTRACT)>0
按照wgsasd311的方法测试通过;

lsqkeke,你这个LEFT函数好像有点问题了,提示“向 substring 函数传递了无效的 length 参数”了。
回复
lsqkeke 2006-03-09
select * from tb
where charindex('b',left(INPUTCODE,charindex(',',INPUTCODE)-1))<>0
回复
wgsasd311 2006-03-09
select * from tb
where charindex(',b',','+inputcode)>0
回复
老汉 2006-03-09
参考了http://community.csdn.net/Expert/topic/4598/4598667.xml?temp=.840542这个帖子,查阅CHARINDEX时,发现用PATINDEX可以解决这个问题;如下:
select * from opr.gbcodes where patindex('%b%', inputcode)<>0

不知道有没有其它的办法?
回复
老汉 2006-03-09
其实,以前有类似如下的表结构:

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%'

现在因为没有办法修改表结构,只好把原来的三个字段合并为一个字段处理,但是不知道该如何检索。

请指教,谢谢了先。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-09 04:41
社区公告
暂无公告