↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 8.2 已结束支持。 请参阅 当前版本手册.

10.5. UNION、CASE及相关结构 #

SQL 的UNION结构必须让可能不同的类型彼此匹配,以形成单一结果集。该解析算法会分别应用到联合查询的每个输出列。INTERSECT和EXCEPT结构以与UNION相同的方式解析不同类型。CASE、ARRAY、VALUES以及GREATEST和LEAST构造使用完全相同的算法来匹配其组成表达式并选择结果数据类型。

UNION、CASE及相关结构的类型解析

  1. 如果所有输入都是unknown类型,则解析为text类型(字符串分类的首选类型)。否则,在选择结果类型时忽略unknown输入。

  2. 如果非unknown输入并非全都属于同一类型分类,则失败。

  3. 选择该分类中的第一个属于首选类型的非unknown输入类型,或者选择一个允许所有非unknown输入都隐式转换为它的非unknown输入类型。

  4. 把所有输入都转换为所选类型。

下面是一些示例。

例 10.7. 未充分指定类型的 UNION 中的类型解析

SELECT text 'a' AS "text" UNION SELECT 'b';

 text
------
 a
 b
(2 rows)

这里,unknown类型字面量'b'会被解析为text类型。


例 10.8. 简单 UNION 中的类型解析

SELECT 1.2 AS "numeric" UNION SELECT 1;

 numeric
---------
       1
     1.2
(2 rows)

字面量1.2的类型是numeric,而integer值1可以隐式转换为numeric,因此使用该类型。


例 10.9. 次序对调的 UNION 中的类型解析

SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL);

 real
------
    1
  2.2
(2 rows)

这里,由于real类型不能隐式转换为integer,而integer可以隐式转换为real,因此UNION结果类型被解析为real。


报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.