存储过程WHERE子句仅返回两类预期结果之一的技术求助
问题分析与解决方案
首先看你怀疑的那行条件:and (c.OurReference like 'P00%' or c.OurReference = 'HEA%'),这里的问题很明显——你对HEA%用了**等于号(=)**而不是LIKE!
LIKE 'P00%'是模糊匹配逻辑,会返回所有以P00开头的OurReference值- 但
= 'HEA%'是精确匹配,它只会找那些**完全等于HEA%**的记录(也就是字符串本身就是HEA加一个百分号),而不是以HEA开头的记录
修复方法
把等于号改成LIKE,修改后的条件应该是:
and (c.OurReference like 'P00%' or c.OurReference like 'HEA%')
完整修改后的存储过程WHERE子句片段
where (Shifts1 = 'y' or Shifts2 = 'y' or s.Rates is not null or s.Breaks is not null) and (c.OurReference like 'P00%' or c.OurReference like 'HEA%') and C.ClientID in (select objectid from SectorObjects where SectorId in (58, 59, 60, 61, 62, 63, 64, 65, 66, 47 ))
额外提示(针对SQL新手)
LIKE操作符必须配合通配符(比如%匹配任意长度的任意字符、_匹配单个任意字符)才能实现模糊匹配- 如果你的数据库排序规则是区分大小写的,可能还需要注意
HEA的大小写是否和数据一致。比如如果数据里是hea开头,你写HEA%可能匹配不到,这种情况可以用LOWER(c.OurReference) LIKE 'hea%'来统一转换成小写匹配
内容的提问来源于stack exchange,提问作者A.Chandler
相关产品推荐
相关产品推荐

