いつもどこかでデスマーチ♪

不定期に、私の日常を書き込みしていきます。

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

2024年01月09日 23時46分24秒 | データベース
昔の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設計を使いまわしてるシステムだ…
く○だろ!


ちなみに、なぜこの記事を書いたかというと、全部対応してるものが見つけられなかったから…
あ、そういう意味だと、小数点データには対応して無いかもねー
正規表現変えてみて
コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« geoserver の SLD はやっぱり... | トップ | WPF Prism で カスタムスプラ... »

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

データベース」カテゴリの最新記事