假设 column1
包含以空格分隔的单词,并且您只想匹配完整的单词,可以使用以下方式:
SELECT * FROM
(select ' ' + REPLACE(column1,' ',' ') + ' ' as column1 from mytable) t
WHERE
column1 like '% word1 %' AND
column1 like '% word2 %' AND
column1 like '% word3 %' AND
REPLACE(REPLACE(REPLACE(column1,
' word1 ',''),
' word2 ',''),
' word3 ','') = ''
注意,该结构确实允许同一个单词出现多次。从问题中并不清楚是否允许这种情况。(
Fiddle)
如果将这些单词作为单独的行存储在与
mytable
相关的另一张表中,那么这将是一种更好的设计。然后我们可以使用更常规的SQL来满足这个查询。你的例子看起来像是某种标记示例。将每个标记作为单独的行存储在表中(如果需要,还可以记录顺序位置),这将把它转化为一个简单的关系除法问题。
计算单词在列中出现的次数的方法是表达式:
(LEN(column2) - LEN(REPLACE(column2,'word',''))/LEN('word')
但是如果不再进行更多的工作,这将再次回到匹配较大单词及其子序列本身的情况。
'word1word3word2'
和'word3 word2 word1'
吗? - Damien_The_Unbeliever