SQL (MySQL) : Match first letter of any word in a string?

标签 sql mysql

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

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

最佳答案

您可以使用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 方言中保持不变。

关于SQL (MySQL) : Match first letter of any word in a string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267808/

相关文章:

sql - Flyway Migrate [SQL] - 处理对象依赖性

c# - 在 sqlConnections 上使用 'Using' 对性能有何影响

c# - 用于从不同表中检索的 SQL 语法?

mysql - 为什么php中只有列的第一个字母来自mysql数据库?

mysql - 如何将表结构从一个数据库复制到另一个数据库?

sql - 单父实体的核心数据性能

sql - 作为 sql 记录一部分的坐标的数据类型

mysql - 在 MySQL 查询中结合 UNION 和 LIMIT 操作

MySQL 将其他 2 个表的计数结果合并到表中,匹配 ID

php - 进度条分割