You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中LIKE函数使用列值替代字符串的实现方案求助

解决SQL中使用列值进行LIKE匹配的问题

你需要筛选出sccholdername既不包含sfirstname也不包含slastname的记录,原语句存在三个关键问题:

  • 拼写错误:sccholddername应为sccholdername
  • LIKE未加通配符:直接用列值匹配LIKE只会在完全相等时成立,无法实现“包含”的匹配逻辑
  • 逻辑运算符错误:用OR会筛选出“不包含名或不包含姓”的记录,而你需要的是“既不包含名也不包含姓”,需改用AND

正确的LIKE实现语句

SELECT *
FROM customers
WHERE sccholdername NOT LIKE CONCAT('%', sfirstname, '%')
  AND sccholdername NOT LIKE CONCAT('%', slastname, '%');
  • CONCAT('%', 列名, '%')将列值包裹在通配符%中,实现“任意位置包含该值”的匹配
  • AND确保两个条件同时满足,即记录的账户名既不包含名也不包含姓

针对示例数据的结果说明

这条语句会选中第一条记录(SCOTT DREWYOR),因为KENT/MICHELLE既不包含SCOTT也不包含DREWYOR;其余记录要么包含名要么包含姓,不会被筛选出来。

替代方案:使用字符串位置函数

如果你的数据库对CONCAT支持有限,或更倾向于用函数判断子字符串存在性,可使用以下方式:

MySQL/Oracle 版本

SELECT *
FROM customers
WHERE INSTR(sccholdername, sfirstname) = 0
  AND INSTR(sccholdername, slastname) = 0;
  • INSTR返回子字符串在目标字符串中的起始位置,返回0表示不存在该子字符串

SQL Server 版本

SELECT *
FROM customers
WHERE CHARINDEX(sfirstname, sccholdername) = 0
  AND CHARINDEX(slastname, sccholdername) = 0;
  • CHARINDEX功能与INSTR一致,返回0表示未找到子字符串

内容的提问来源于stack exchange,提问作者BBE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:51:01