(注意:这是针对MySQL的SQL,而不是SQL Server.)
我有一个数据库列,其值为"abc def GHI JKL".我想编写一个WHERE子句,其中包含对以特定字母开头的任何单词的不区分大小写的测试.例如,该示例将对字母a,c,g,j测试为true,因为从每个字母开始都有一个"单词".该应用程序用于搜索,该搜索提供查找仅包含以指定字母开头的单词的记录.另请注意,此表没有全文索引.
您可以使用LIKE
操作.如果您的单词以空格分隔,请在字符串的开头添加一个空格,以便为第一个单词提供匹配的机会:
SELECT StringCol FROM MyTable WHERE ' ' + StringCol LIKE '% ' + MyLetterParam + '%'
哪里MyLetterParam
可能是这样的:
'[acgj]'
要查找多个空格作为单词分隔符,您可以扩展该技术.以下将TAB,CR,LF,空格和NBSP视为单词分隔符.
WHERE ' ' + StringCol LIKE '%['+' '+CHAR(9)+CHAR(10)+CHAR(13)+CHAR(160)+'][acgj]%'
这种方法非常适合作为标准SQL.它将在主要的SQL方言中保持不变.
使用REGEXP opearator:
SELECT * FROM `articles` WHERE `body` REGEXP '[[:<:]][acgj]'
它返回记录,其中列体包含以a,c,g或i开头的单词(不区分大小写)
但请注意:如果您期望任何重负载(不使用索引 - 它会扫描每一行,这不是一个好主意!)