日期:2014-05-18  浏览次数:20607 次

contains的使用
表1:
ID 症名列表
32947 ,便血,热毒,
35803 ,脐腹冷痛,痿弱,不闻香臭,血热,冷泪,阴汗,
38948 ,血热,目睛疼痛,
44022 ,血热,热毒,痰实,胸膈不利,头目眩晕,肠风,疮疡,口舌干燥,咽喉肿痛,
44042 ,热毒,血热,头目不利,
44072 ,血热,小便不通,
44098 ,诸热,血热,目赤,
52812 ,吐血,衄血,血热,
52856 ,鼻衄,血热,
52945 ,血热,鼻衄不止,
53014 ,衄血,汗血,热结,
53015 ,衄血,汗血,热盛,



要查找表里有'血热' 症状的记录

select * from xt_td_ColumnToRow_pjf_zmym
  where contains(症名列表,'血热');

结果把下面这些记录也查出来了

32947 ,便血,热毒,
46042 ,伤寒八日,热病,下痢脓血,热毒,
53014 ,衄血,汗血,热结,
53015 ,衄血,汗血,热盛,

问题:
1.怎么才能把这些条去掉呢?

2. 要查表里症名列表里同时含“血热”“目赤”的记录怎么写?

select * from xt_td_ColumnToRow_pjf_zmym
  where contains(症名列表,'"血热" and "有血"');
实际这表1里没有这样的数据
但是却把所有含“血热”的给列出来了




------解决方案--------------------
SQL code
select * from xt_td_ColumnToRow_pjf_zmym with(nolock) where [症名列表] like '%血热%' or [症名列表] like '%目赤%'

contains  是全文索引的查询方法

------解决方案--------------------
我只说一句话:查看联机丛书

哈哈
------解决方案--------------------
SQL code

--可以试一下这种
select * from xt_td_ColumnToRow_pjf_zmym
  where contains(症名列表,'血热 NEAR 有血' );
  --这种只能查询出保护 这俩个词,并且是相邻的情况下

------解决方案--------------------
1、 搜索特定词:contains(detail,'姚明')

2、 搜索特定短语:用““将短语包含在双引号内,contains(detail,'姚明 上海')

3、 从多个列中搜索词和短语:contains((title,detail),'姚明 上海')

4、搜索以指定文本开头的词或短语:contains(detail,'“姚明*“')

如果文本和星号不包含在双引号内,则全文搜索会将星号看做是一个字符。如果搜索的是短语,则该短语内的每个词都被看做是一个前缀。contains(detail,'“姚明 上海*“')则将返回第一个词以姚明开头第二个词以上海开头的结果

5、 搜索特定词的变形:contains(detail,'formsof(inflectional,ride)')

将返回表中含有ride,rides,riding,ridden的行

6、搜索与另一个词或短语临近的词或者短语:contains(detail,'姚明 near 上海')

7、使用加权值的词或短语:contains(description,’isabout(performance weight(.8),comfortable weight(.4),smooth weight(.2))’)

Weight为每个词或短语指定一个0.0~1.0之间的加权值

8、使用多个搜索条件: contains(detail,'”姚明” or “上海”')

contains(detail,'”姚明” and “上海”')

contains(detail,'”姚明” and not “上海”')

9、在contains中还可以使用变量