假设是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')
但这将再次恢复到匹配的大词,以及这个词本身的子序列,没有更多的工作。
你可以在这部分阐述,请'”其中column1包含word1 word2和word3,没有别的!“' –
现在我得到的结果是Column1包含多于这3个单词,如'word1 word2 word3 word4',我需要的结果与在LIKE子句中准确指定单词,但以任何顺序。 –
目前,您可以匹配单词的部分以及整个单词。你想匹配“word1word3word2”还是“word3 word2 word1”? –