いやぁども。
お久しぶりです。
お久しぶりですが、個人メモ。
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