带有扭曲的SQL Server通配符选择

时间:2015-11-02 15:26:48

标签: sql sql-server-2005

我正在使用某些关键字从字符串类型列中提取一些通配符,但是对于我列表中的某些关键字,我得到了一些我不希望输出的误报。我的通配符选择中的一些关键字是“旧”'旧版'和'年龄'

select * from DESCRIPTIONS..LONG
where (DESCR like '% old %'
or DESCR like '% older %'
or DESCR like '% age %'
or DESCR like '%old%'
or DESCR like '%older%'
or DESCR like '%age%')

我想只提取包含这些绝对字词的行,但我最终会返回包含' management',' image',' cold',& #39;较冷'我可以通过不寻找下面的

来删除这些真正的否定
DESCR like '%old%'
or DESCR like '%older%'
or DESCR like '%age%'

但是在那个过程中我排除了具有特殊字符的行,例如句号,逗号,斜线等,这些都是真正的正面因素。我会想念以“年龄”结尾的字符串。'或者“老了。”#39;或者“年龄大了,'或者'年龄'当它是字符串中没有尾随空格的最后一个单词时。

如何排除真阴性和误报,只获得所有真阳性?

这是我用逗号分隔的关键字的完整列表。

关键字:新生儿,新生儿,婴儿,婴儿,年,年,儿童,儿童,成人,成人,儿科,老年人,老年人,年轻人,年轻人,年龄

由于

3 个答案:

答案 0 :(得分:1)

假设空格描绘了单词,你可以使用这个技巧:

select *
from DESCRIPTIONS..LONG
where ' ' + DESCR + ' ' like '% old %' or
      ' ' + DESCR + ' ' like '% older %' or
      ' ' + DESCR + ' ' like '% age %';

答案 1 :(得分:1)

我建议您开始查看Microsoft的LIKE语法: https://msdn.microsoft.com/en-us/library/ms179859.aspx

您在搜索自由文字字段吗?您可以使用[]语法:

SELECT FROM DESCRIPTION..LONG
    WHERE DESCR LIKE '%[ "\/-]age[,.:;'' "\/-]%'

您在方括号内放置了您在该位置接受的所有内容,并使用标点符号来解决您的问题。

答案 2 :(得分:0)

您需要使正则表达式更复杂:

LIKE '%[^a-z]old[^a-z]%'

这将做的是搜索“#34; old"在它之前或之后没有任何字母(^具有&#34的含义;不是"在正则表达式中)。

相关问题