投稿

1月, 2024の投稿を表示しています

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ブログから作成者本人が移行しました。  **********************************************************************************/

geoserver の SLD はやっぱり難しい

SLD関連: ttps://blog.goo.ne.jp/pianyi/e/b81969d6e1fa29e878e49c30b37f2fc8 geoserver の SLD を作ってますが、やはり難しいですね。 今回は、SQLで言うLIKE の実装です。 やりたい事: Aカラム内に Bカラムの値が存在する。 かつ Aカラム内にenv引数のC値が存在する。 場合、マークを表示する。 SLDのフィルター部: <ogc:Filter> <ogc:And> <ogc:PropertyIsLike wildCard="*" singleChar="#" escape="!"> <ogc:PropertyName>testOthers</ogc:PropertyName> <ogc:Literal>*<ogc:PropertyName>testValue</ogc:PropertyName>*</ogc:Literal> </ogc:PropertyIsLike> <ogc:PropertyIsEqualTo> <ogc:Function name="isLike"> <ogc:PropertyName>testOthers</ogc:PropertyName> <ogc:Function name="Concatenate"> <ogc:Literal>.*</ogc:Literal> <ogc:Function name="env"> ...