首页 > 解决方案 > 相当于 SELECT 0 的东西,但对于字符串。它是 SELECT '' 吗?

问题描述

什么相当于:

SELECT 0 as foo;

但对于字符串,是不是:

SELECT '' as bar;

?

有关更多上下文,这是用于UNION ALL查询

[编辑]

SELECT NULL 是我一直在寻找的。在我正在做的顶部查询中:SELECT COUNT(DISTINCT(bar)),但空字符串算作不同的字符,NULL没有。

标签: sqlpostgresql

解决方案


如果您想要字符串形式的“等价物” SELECT 0,那么它将是SELECT '0'::int.

如果您正在寻找一个非空字符串来表示“无数据”,SELECT '' AS something就足够了

当您调用UNION ALL时,期望列将对齐,并且数据集将沿其列顺序连接。既然你想要UNION ALL一个integerand char,你会得到一个错误:

edb=# select 0 as something union all select '' as something;
ERROR:  invalid input syntax for type integer: ""
LINE 1: select 0 as something union all select '' as something;
                                               ^

因此,为了UNION ALL,您需要将您的转换0char

edb=# select 0::char as something union all select '' as something;
 something 
-----------
 0
 
(2 rows)

警告

我不确定这是否真的是你想要做的,但如果你正在寻找UNION ALL这两组,那就是你要做的。但是,这有可能会打开一罐蠕虫 -''将被视为等同于0?你将如何处理非零值?你还会把那些integers 转换成字符串吗?我认为您需要考虑这些影响并尝试找到一种方法来清理您的数据。

一般来说,NULL如果您的设计允许,使用值可能会更好


推荐阅读