将字符串转换为数字,将null或空字符串解释为0
我有一个Postgres表,带有一个带数字值的字符串列。我需要将这些字符串转换为数字以进行数学运算,但我需要同时使用两个NULL
值和空字符串来将其解释为0
。
我可以将空字符串转换为null值:
# select nullif('',''); nullif
--------
(1 row)
而且我可以将空值转换为0
:
# select coalesce(NULL,0); coalesce
----------
0
(1 row)
而且我可以将字符串转换为数字:
# select cast('3' as float); float8
--------
3
(1 row)
但是,当我尝试结合使用这些技术时,会出现错误:
# select cast( nullif( coalesce('',0), '') as float);ERROR: invalid input syntax for integer: ""
LINE 1: select cast( nullif( coalesce('',0), '') as float);
# select coalesce(nullif('3',''),4) as hi;
ERROR: COALESCE types text and integer cannot be matched
LINE 1: select coalesce(nullif('3',''),4) as hi;
我究竟做错了什么?
回答:
值的类型必须保持一致;将空字符串合并为0表示您无法再将其与null
中的进行比较nullif
。因此,这些作品之一:
# 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)
以上是 将字符串转换为数字,将null或空字符串解释为0 的全部内容, 来源链接: utcz.com/qa/399098.html