postgresql の 数値キャストエラー には参った…

昔のDBがそのまま利用されながら新しいシステムを使っている場合…

1カラムを 数値型で宣言
2カラムを text 型で宣言

として、
1カラム目を区分
2カラム目を値

と利用しているDBがありました。

その結果、数値変換できるカラムとできないカラムが混在してます。
WHERE で 「1カラム=1 AND 2カラム::SMALLINT=1」 とかやると空白データ、nullデータ、文字データ等々エラーが続発…
ってわけでこれに落ち着きました。

 CAST(REGEXP_REPLACE('0' || COALESCE(2カラム, '0'), '[^0-9]+', '0', 'g') AS SMALLINT) = 103
 


1.COALESCE で null データを 0に変換
2.'0' || で 先頭に0を加える事で、 空文字に対応
3.REGEXP_REPLACE で 半角数値以外を 0に変換
4.CAST で 半角数値を SMALLINT に変換


これで全パターン行けただろう!?
さすが20年以上前のDB設計を使いまわしてるシステムだ…
く○だろ!


ちなみに、なぜこの記事を書いたかというと、全部対応してるものが見つけられなかったから…
あ、そういう意味だと、小数点データには対応して無いかもねー
正規表現変えてみて

/**********************************************************************************
本記事はGooブログから作成者本人が移行しました。
 **********************************************************************************/

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ