How do I cast a string to integer and have 0 in case of error in the cast with PostgreSQL?

前端 未结 13 956
误落风尘
误落风尘 2020-12-02 06:27

In PostgreSQL I have a table with a varchar column. The data is supposed to be integers and I need it in integer type in a query. Some values are empty strings. The followin

13条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-02 07:02

    I was just wrestling with a similar problem myself, but didn't want the overhead of a function. I came up with the following query:

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

    Postgres shortcuts its conditionals, so you shouldn't get any non-integers hitting your ::integer cast. It also handles NULL values (they won't match the regexp).

    If you want zeros instead of not selecting, then a CASE statement should work:

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

提交回复
热议问题