如何用SQL查询数据库值是否为输入字符串的子串?
实现数据库字段值是否为输入字符串的子串查询
你需要的是反向匹配:判断数据库中的name字段值是否是输入字符串的子串,而非输入内容是否包含在字段中。以下是主流数据库的实现方案,同时处理大小写不敏感的场景(匹配示例中的ANDROID和Android studio):
MySQL/MariaDB 实现
可以使用LIKE结合字符串拼接,或者LOCATE函数:
方法1:LIKE 反向匹配
SELECT name FROM technology WHERE LOWER('Android studio') LIKE CONCAT('%', LOWER(name), '%');
LOWER()函数统一转换为小写,避免大小写差异导致匹配失败CONCAT('%', LOWER(name), '%')将数据库字段值包装为模糊匹配的通配符格式,用输入字符串去匹配它
方法2:LOCATE 函数
SELECT name FROM technology WHERE LOCATE(LOWER(name), LOWER('Android studio')) > 0;
LOCATE(substr, str)返回子串在字符串中的起始位置,若返回值>0则说明存在匹配
PostgreSQL 实现
PostgreSQL支持原生忽略大小写的ILIKE,也可以用POSITION函数:
方法1:ILIKE 反向匹配
SELECT name FROM technology WHERE 'Android studio' ILIKE CONCAT('%', name, '%');
ILIKE自动忽略大小写,无需额外转换
方法2:POSITION 函数
SELECT name FROM technology WHERE POSITION(LOWER(name) IN LOWER('Android studio')) > 0;
SQL Server 实现
使用CHARINDEX函数处理子串匹配:
SELECT name FROM technology WHERE CHARINDEX(LOWER(name), LOWER('Android studio')) > 0;
CHARINDEX(substr, str)功能类似LOCATE,返回子串位置,>0表示匹配成功
说明
如果你的输入字符串是动态变量(比如来自应用程序),建议使用参数化查询避免SQL注入风险,不同编程语言的参数化方式略有差异,但核心逻辑一致。
内容的提问来源于stack exchange,提问作者Lulex97
相关产品推荐
相关产品推荐

