如何编写SQL实现Column1匹配Column2内容并将匹配值存入Column3
实现需求的SQL方案
逻辑说明
判断Column1的字符串是否完整包含Column2的取值,匹配时将Column2的值写入Column3,不匹配时可根据需求置为NULL或其他默认值。
1. 仅查询结果(不修改原表)
通用写法(适配MySQL、SQL Server等大多数支持LIKE语法的数据库)
SELECT Column1, Column2, CASE WHEN Column1 LIKE CONCAT('%', Column2, '%') THEN Column2 ELSE NULL END AS Column3 FROM 替换为你的实际表名;
2. 更新原表的Column3字段
UPDATE 替换为你的实际表名 SET Column3 = CASE WHEN Column1 LIKE CONCAT('%', Column2, '%') THEN Column2 ELSE NULL END;
不同数据库的适配写法
- PostgreSQL 可以用
strpos函数实现更直观的判断:-- 查询语句 SELECT Column1, Column2, CASE WHEN strpos(Column1, Column2) > 0 THEN Column2 ELSE NULL END AS Column3 FROM 替换为你的实际表名; -- 更新语句 UPDATE 替换为你的实际表名 SET Column3 = CASE WHEN strpos(Column1, Column2) > 0 THEN Column2 ELSE NULL END; - Oracle 数据库使用
INSTR函数实现:-- 查询语句 SELECT Column1, Column2, CASE WHEN INSTR(Column1, Column2) > 0 THEN Column2 ELSE NULL END AS Column3 FROM 替换为你的实际表名; -- 更新语句 UPDATE 替换为你的实际表名 SET Column3 = CASE WHEN INSTR(Column1, Column2) > 0 THEN Column2 ELSE NULL END;
注意:如果需要忽略大小写匹配,可将两个字段统一转为大写/小写后再判断,例如MySQL下可写为
LOWER(Column1) LIKE CONCAT('%', LOWER(Column2), '%')。
内容的提问来源于stack exchange,提问作者Niket dubey
相关产品推荐
相关产品推荐

