Transact-SQLに引っかかる。

いやぁども。

お久しぶりです。

お久しぶりですが、個人メモ。

Transac-SQLで文字から数字へ変換
テーブル Test
data(nvarchar)
———-
01
 010
0003
A
 B
———-

↑のようなめちゃくちゃなデータのテーブルからきれいに値を取りだす。

目指す結果は
Result
——–
1
10
A
B

この場合、数字を一度integerでCASTすることで、頭の空白や0をはずせます、が、CastだとAとBでエラーが出ます。

そこでこんな風に。
select
case when (IsNumeric(data)) = 1 then Cast(data as Integer)
else Ltrim(Rtrim(data))
end as Result
From Test

おっと!ただしコレじゃ「nvarcharをintに変換できません」的なエラーになります。

正直一晩悩みました。

なぜか。

まずこのSQLは特にソートしていませんのでテーブルの上から処理します。

01はisnumericで1が帰ってきます。そこでCastするんですが、このときにエイリアス「Result」の型がintegerに決定されてしまいます。

んだ。こまっただ。

というわけで。

select
case when (IsNumeric(data)) = 1 then str(Cast(data as Integer))
else Ltrim(Rtrim(data))
end as Result
From Test

文字列に変換してやりましょう。

まぁちょっと特殊な事例ですが、誰か困った人の参考にでもなればうれしいです。

あぁまだまだ修行がたりんなぁ。。。

検索:
Transact-SQL Cast IsNumeric Case When nvarcharの値 をデータ型 int に変換できませんでした メッセージ 245 レベル 16

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください