http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_40
んー。
やっぱり最強は4.0の最後らへんのバージョンだな。
いやぁども。
お久しぶりです。
お久しぶりですが、個人メモ。
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
みなさんこんばんは。お久しぶりです。
暑い日が続いております。夏ばてなどされていないでしょうか。
さてさて、ちょっとした近況報告ですが、
先日内定をいただいた会社へ新入社員の懇親会に行ってまいりました。
うーん!これら4月からともに戦う仲間か!!!!
などと考えつつ、無事に終了いたしました。
いやぁ楽しみですね。本当に。面白くなりそうでわくわくしています。
いいスタートを切れるようにもっといろいろ勉強しないとなぁ。
とりあえずはいい加減に基本情報を取る!これで行きます。
とりあえずこの歌が好きです。
ではでは。またの機会に。