「、」に対してtrueを返すsqlserverのISNUMERIC関数に問題があります
郵便番号を解析して、2 番目の文字 (数字であるはず) が 0 であるかどうかを確認し、それぞれの場合で異なることをしようとしています。問題は、最初に isNumeric をチェックして char をキャストできないことです。これは、スカラー値関数が 2 番目の char 位置の数字を返し、それが数字でない場合は -1 を返すコードです。
@declare firstDigit int
IF ISNUMERIC(SUBSTRING(@postal,2,1) AS int) = 1
set @firstDigit = CAST(SUBSTRING(@postal,2,1) AS int)
ELSE
set @firstDigit = -1
RETURN @firstdigit
郵便番号が完全に有効でない場合、これは失敗するためです。nvarchar @postal の 2 番目の文字が 0 ~ 9 の数字であるかどうかを確認する方法を見つけようとしています。LIKE [0-9]
usingや usingPATINDEX
など、さまざまな種類のソリューションを見てきました。
これを行うためのより良い/より簡単な方法はありますか?そうでない場合、どの方法が最速ですか?
編集: Aaron Bertrand の提案に従ってコードが追加されました
ON z.postal =
CASE
WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]'
THEN SUBSTRING(v.patientPostal, 2,1) END) = 0 then v.patientPostal
WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]'
THEN SUBSTRING(v.patientPostal, 2,1) END) > 0 then LEFT(v.patientPostal,3)