SQL关联查询时如何实现like模糊匹配不区分大小写?
SQL模糊匹配不区分大小写调整方案
针对你当前的场景,总共有3种可行的调整方式,按需选择即可:
通用兼容方案(适配所有数据库,无需修改表结构)
直接将两个匹配字段统一转为小写/大写后再做匹配,3万条数据加52个关键词的量级下性能无压力,修改后的SQL如下:
SELECT a.*, b.word FROM key_word b INNER JOIN ssn_match_date a ON LOWER(a.narrative) LIKE CONCAT('%', LOWER(b.word), '%')
如果使用SQL Server数据库,将LOWER替换为LCASE效果完全一致。
长期优化方案(适合频繁需要不区分大小写匹配的场景)
你可以直接修改两个表对应字段的校对规则为「不区分大小写」类型,修改后原有SQL不需要任何调整就能自动实现不区分大小写匹配。
以MySQL为例,修改校对规则的语句如下(替换为你实际的字段长度即可):
-- 修改ssn_match_date表narrative字段校对规则 ALTER TABLE ssn_match_date MODIFY COLUMN narrative VARCHAR(实际字段长度) COLLATE utf8mb4_general_ci; -- 修改key_word表关键词字段校对规则 ALTER TABLE key_word MODIFY COLUMN word VARCHAR(实际字段长度) COLLATE utf8mb4_general_ci;
校对规则后缀的ci就是Case Insensitive的缩写,代表不区分大小写。
数据库专属语法方案
部分数据库提供了原生的不区分大小写匹配语法,写法更简洁:
- PostgreSQL数据库可直接使用
ILIKE关键字替换LIKE:
SELECT a.*, b.word FROM key_word b INNER JOIN ssn_match_date a ON a.narrative ILIKE CONCAT('%', b.word, '%')
- SQL Server数据库可在匹配时临时指定校对规则:
SELECT a.*, b.word FROM key_word b INNER JOIN ssn_match_date a ON a.narrative LIKE CONCAT('%', b.word, '%') COLLATE SQL_Latin1_General_CP1_CI_AS
内容的提问来源于stack exchange,提问作者user601828
相关产品推荐
相关产品推荐

