4

文字列フィールドの最後の0文字であるすべてのインスタンスを検索したい単一のテーブルがあります。2つの方法を使用してこれを試しましたが、それぞれ異なる結果が返されました。

この最初のクエリは実際に正しい答えを返すようでした

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

文字列の最初の「0」を返さないPATINDEXので、文字列に複数のゼロPATINDEX('%0%',icd) = LEN(icd)がある場合、最後に別のゼロがあったとしてもfalseになりますか?

于 2012-10-23T16:03:59.103 に答える
1

いくつかのデータなしで言うのは難しいですが、文字列の最後の位置から開始するようにCHARINDEXに指示しているため、最後の文字のみが考慮されます(これはあなたがやりたいことのようです)が、PATINDEXはすべてのストリング。

参考までに、SUBSTRING関数であなたが望むことを達成する方が良いと思います

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