SQL(MySQL):匹配字符串中任何单词的首字母?

Dou*_*aye 4 mysql sql

(注意:这是针对MySQL的SQL,而不是SQL Server.)

我有一个数据库列,其值为"abc def GHI JKL".我想编写一个WHERE子句,其中包含对以特定字母开头的任何单词的不区分大小写的测试.例如,该示例将对字母a,c,g,j测试为true,因为从每个字母开始都有一个"单词".该应用程序用于搜索,该搜索提供查找仅包含以指定字母开头的单词的记录.另请注意,此表没有全文索引.

Tom*_*lak 7

您可以使用LIKE操作.如果您的单词以空格分隔,请在字符串的开头添加一个空格,以便为第一个单词提供匹配的机会:

SELECT
  StringCol
FROM
  MyTable
WHERE
  ' ' + StringCol LIKE '% ' + MyLetterParam + '%'
Run Code Online (Sandbox Code Playgroud)

哪里MyLetterParam可能是这样的:

'[acgj]'
Run Code Online (Sandbox Code Playgroud)

要查找多个空格作为单词分隔符,您可以扩展该技术.以下将TAB,CR,LF,空格和NBSP视为单词分隔符.

WHERE
  ' ' + StringCol LIKE '%['+' '+CHAR(9)+CHAR(10)+CHAR(13)+CHAR(160)+'][acgj]%'
Run Code Online (Sandbox Code Playgroud)

这种方法非常适合作为标准SQL.它将在主要的SQL方言中保持不变.


Inc*_*tly 5

使用REGEXP opearator:

SELECT * FROM `articles` WHERE `body` REGEXP '[[:<:]][acgj]'
Run Code Online (Sandbox Code Playgroud)

它返回记录,其中列体包含以a,c,g或i开头的单词(不区分大小写)

但请注意:如果您期望任何重负载(不使用索引 - 它会扫描每一行,这不是一个好主意!)