4

我有一个表,我希望在其中找到字符串字段中0最后一个字符的所有实例。我通过使用两种方法进行了尝试,它们都返回了不同的结果。

这第一个查询似乎实际上返回了正确的答案

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不加选择地遗漏一些行?

4

3 回答 3

4

因为你在结束之前的某个地方有一个 0 。更改PATINDEX('%0%',icd)PATINDEX('%0',icd)

于 2012-10-23T16:02:45.550 回答
2

不会PATINDEX返回字符串中的第一个“0”,因此如果字符串有多个零PATINDEX('%0%',icd) = LEN(icd),即使最后还有另一个零也是假的?

于 2012-10-23T16:03:59.103 回答
1

没有一些数据很难说,但我认为因为你告诉 CHARINDEX 从字符串的最后一个位置开始,所以它只会考虑最后一个字符(这似乎是你想要做的)但是 PATINDEX 正在考虑所有细绳。

仅供参考,我认为使用 SUBSTRING 功能实现您想要的效果会更好

where SUBSTRING(icd, len(icd),1)
于 2012-10-23T16:05:48.523 回答