Cast string to number, interpreting null or empty string as 0

后端 未结 4 1076
情话喂你
情话喂你 2021-02-05 00:31

I have a Postgres table with a string column carrying numeric values. I need to convert these strings to numbers for math, but I need both NULL values as well as em

4条回答
  •  野的像风
    2021-02-05 00:45

    The types of values need to be consistent; coalescing the empty string to a 0 means that you cannot then compare it to null in the nullif. So either of these works:

    # create table tests (orig varchar);
    CREATE TABLE
    
    # insert into tests (orig) values ('1'), (''), (NULL), ('0');
    INSERT 0 4
    
    
    # select orig, cast(coalesce(nullif(orig,''),'0') as float) as result from tests;
     orig | result 
    ------+--------
        1 |      1
          |      0
          |      0
        0 |      0
    (4 rows)
    
    
    # select orig, coalesce(cast(nullif(orig,'') as float),0) as result from tests;
     orig | result 
    ------+--------
     1    |      1
          |      0
          |      0
     0    |      0
    (4 rows)
    

提交回复
热议问题