1. ホーム
  2. sql

[解決済み] PostgreSQLで文字列を整数にキャストし、キャストにエラーが発生した場合に0を返すにはどうすればよいですか?

2022-05-08 13:11:04

質問

PostgreSQLで、varcharカラムを持つテーブルがあります。データは整数であることが想定されており、クエリで整数型にする必要があります。いくつかの値は空の文字列です。 次のようなものです。

SELECT myfield::integer FROM mytable

イールド ERROR: invalid input syntax for integer: ""

postgres でキャストのクエリを実行し、キャスト中にエラーが発生した場合に 0 を返すにはどうすればよいですか?

どのように解決するのですか?

私はちょうど同じような問題と格闘していたのですが、関数のオーバーヘッドを必要としませんでした。私は次のようなクエリを思いつきました。

SELECT myfield::integer FROM mytable WHERE myfield ~ E'^\\d+$';

Postgresは条件分岐を短くするので、::integerキャストに非整数がヒットしないはずです。また、NULL値も扱えます(正規表現にマッチしません)。

もし、選択しない代わりにゼロが欲しいのであれば、CASE ステートメントを使用すればよいでしょう。

SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;