Text
列为NVARCHAR(MAX)
类型。
ID Text
001 have odds and modds
002 odds>=12
003 modds
004 odds < 1
如何在文本列中搜索包含odds
且不包含modds
我试试:
Select * from MyTable
Where text LIKE '%odds%' AND text NOT LIKE '%modds%'
但结果不正确归还所有。我想要回归
ID Text
001 have odds and modds
002 odds>=12
004 odds < 1
有什么想法吗?谢谢!
答案 0 :(得分:2)
WHERE (text LIKE '%odds%' AND text NOT LIKE '%modds%')
OR (text LIKE '%odds%odds%')
关于这是如何工作的一些问题。首先,SQL使用数据的“集合”,所以我们需要一个选择器(WHERE子句)来创建我们的“set”(如果没有包含它就是整个表“set”)
所以我们在这里创建了两个部分。
首先,我们在某处选择包含值“odds”的所有行,但不包括“modds”。这排除了仅包含“modds”的行。
其次,我们在其中包含其中包含两个“赔率”值的行 - “%”是一个通配符,以便从头开始分解它。
这适用于此特定情况,因为这两个单词都包含“赔率”,因此此处的顺序不具体。如果我们想用不同的词来做那些,例如“猫”,“猫”和“狗”,但只是“狗:我们会:
WHERE (mycolumn LIKE '%cats%' AND mycolumn NOT LIKE '%dogs%')
OR ((mycolumn LIKE '%cats%dogs%') OR (mycolumn LIKE '%dogs%cats%'))
这也可以写成:(与AND一起使用)
WHERE (mycolumn LIKE '%cats%' AND mycolumn NOT LIKE '%dogs%')
OR (mycolumn LIKE '%cats%' AND mycolumn LIKE '%dogs%')
这将捕获值而不考虑列中“cats”和“dogs”值的顺序。
请注意,对于最后两个解决方案示例,带括号的分组不是可选的。
答案 1 :(得分:0)
Select * from MyTable
Where text LIKE 'odds%'
答案 2 :(得分:0)
Select * from MyTable Where text LIKE '% odds%' or text LIKE 'odds%'
答案 3 :(得分:0)
最灵活高效的方法是使用全文搜索。这将为指定文本列中的每个单词创建索引。
此功能包含在(至少某些版本的)Microsoft SQL Server中。