回答:
ワイルドな推測:値が空の文字列の場合、NULLIFを使用してNULLに置き換えることができます。
SELECT
NULLIF(your_value, '')::int
NULL、特殊文字、空の文字列が原因でエラーが発生しない唯一の方法は、次のようにすることです。
SELECT REGEXP_REPLACE(COALESCE(<column>::character varying, '0'), '[^0-9]*' ,'0')::integer FROM table
WHERE <column> != NULL
か?
値に数値以外の文字が含まれている場合は、次のように値を整数に変換できます。
SELECT CASE WHEN <column>~E'^\\d+$' THEN CAST (<column> AS INTEGER) ELSE 0 END FROM table;
CASE演算子は<column>をチェックし、それが整数パターンに一致する場合、レートを整数に変換し、そうでない場合、0を返します
このクエリを使用できます
SUM(NULLIF(conversion_units, '')::numeric)
文字列を整数に単純に型キャストする
SELECT ''::integer
多くの場合、有名なエラーが発生します。
Query failed: ERROR: invalid input syntax for integer: ""
PostgreSQLには、文字列を整数に安全に型キャストするための事前定義された関数はありません。
PHPのintval()関数に触発されたユーザー定義関数を作成します。
CREATE FUNCTION intval(character varying) RETURNS integer AS $$
SELECT
CASE
WHEN length(btrim(regexp_replace($1, '[^0-9]', '','g')))>0 THEN btrim(regexp_replace($1, '[^0-9]', '','g'))::integer
ELSE 0
END AS intval;
$$
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
/* Example 1 */
SELECT intval('9000');
-- output: 9000
/* Example 2 */
SELECT intval('9gag');
-- output: 9
/* Example 3 */
SELECT intval('the quick brown fox jumps over the lazy dog');
-- output: 0