我有一个表格,我希望找到0
是字符串字段中 last 字符的所有实例。我通过使用两种方法尝试了这一点,它们各自返回不同的结果。
第一个查询似乎实际上返回了正确答案
select * from icd
where CHARINDEX('0',icd,LEN(icd)) =LEN(icd)
这个没有得到所有的答案
select * from icd
where PATINDEX('%0%',icd) = LEN(icd)
使用
select t.ICD as theCharIndex,x.ICD as thePatIndex from
(
select * from icd
where CHARINDEX('0',icd,LEN(icd)) =LEN(icd)
) t
left join
(
select * from icd
where PATINDEX('%0%',icd) = LEN(icd)
) x on x.ICD=t.ICD
where x.ICD is null
我发现CHARINDEX
选择的PATINDEX
数据集没有update icd
set ICD=RTRIM(icd)
。我甚至做过
PATINDEX
为什么{{1}}不分青红皂白地遗漏了一些行?
答案 0 :(得分:4)
因为你在结束前的某个地方有0。
将PATINDEX('%0%',icd)
更改为PATINDEX('%0',icd)
答案 1 :(得分:2)
不会PATINDEX
在字符串中返回FIRST“0”,因此如果字符串有多个零PATINDEX('%0%',icd) = LEN(icd)
,那么即使最后还有一个零,也会是假的吗?< / p>
答案 2 :(得分:1)
很难说有一些数据,但我thiknk是因为你告诉CHARINDEX从字符串的最后位置开始,所以它只会考虑最后一个字符(这似乎是你想要做的)但是PATINDEX是lloking进入所有的字符串。
仅供参考,我认为用SUBSTRING函数实现你想要的效果会更好
where SUBSTRING(icd, len(icd),1)