36

これらの質問のいくつかを見てきましたが、助けになったものは見つかりませんでした!! 郵便番号の最初の部分のみを選択しようとしており、基本的にスペースの後の部分は無視しています。私が使用しているコードは

SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode ) -1)

ただし、無効な長さパラメーターが LEFT または SUBSTRING 関数に渡されます! null や空白はありませんが、最初の部分だけしかないものもあります。これがエラーの原因ですか? もしそうなら、回避策は何ですか?

4

5 に答える 5

49

これは、 にスペースがない場合にのみ発生PostCodeします。PostCode次のように、スペースが見つからない場合にすべてが取得されるような条件を追加できます。

select SUBSTRING(PostCode, 1 ,
case when  CHARINDEX(' ', PostCode ) = 0 then LEN(PostCode) 
else CHARINDEX(' ', PostCode) -1 end)
于 2013-06-28T15:19:31.020 に答える
27

CHARINDEX0文字列にスペースがなく、長さの部分文字列を探す場合に返されます-1

文字列の末尾に末尾のスペースを追加して、常に少なくとも 1 つのスペースがあることを確認し、この問題を回避できます。

SELECT SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode + ' ' ) -1)
于 2013-06-28T15:21:34.323 に答える
9

これは、" " (スペース) のルックアップが 0 の場合、CHARINDEX-1が -ive 値を返すためです。最も簡単な解決策は、追加して「-ve 」を回避することです。

ABS(CHARINDEX(' ', PostCode ) -1))

CHARINDEX(' ', PostCode ) -1)-ve値であっても、長さに対して+ive値のみを返します。間違っていたら訂正してください!

于 2015-01-12T14:37:08.740 に答える