SQL如何查询某列的值存在于另一列中的对应数据行
SQL筛选子串匹配行方案
通用跨数据库实现
使用LIKE关键字拼接通配符即可覆盖完全匹配、子串匹配的所有场景,兼容绝大多数主流数据库:
SELECT * FROM Name WHERE MiddleName LIKE CONCAT('%', Forename, '%');
各数据库专属简化写法
部分数据库提供了内置的子串位置判断函数,写法更直观:
- MySQL 实现:
SELECT * FROM Name WHERE INSTR(MiddleName, Forename) > 0;
- SQL Server 实现:
SELECT * FROM Name WHERE CHARINDEX(Forename, MiddleName) > 0;
- PostgreSQL 实现:
SELECT * FROM Name WHERE POSITION(Forename IN MiddleName) > 0;
大小写不敏感匹配方案
如果需要忽略大小写匹配,可以统一转为大写/小写后再判断:
SELECT * FROM Name WHERE UPPER(MiddleName) LIKE CONCAT('%', UPPER(Forename), '%');
注意:如果
Forename字段值可能包含%、_等SQL LIKE语法的通配符,需要先对特殊字符做转义处理,避免出现非预期的匹配结果。
内容的提问来源于stack exchange,提问作者Shuffty123
相关产品推荐
相关产品推荐

