7.5. UNIONCASE构造

SQL 的 UNIONCASE 构造必须把那些可能不太相似的类型匹配起来成为一个结果集. 解析算法分别应用于 UNION 查询的每个输出字段. INTERSETEXCEPT构造对不相似的类型使用和 UNION相同的算法进行解析. CASE 构造也使用同样的算法 匹配它的部件表达式并且选择一个结果数据类型.

UNIONCASE 类型解析

  1. 如果所有输入都是类型 unknown,解析成类型text (字串类型的优选类型).否则,在选择类型的时候忽略 unknown 输入.

  2. 如果非 unknown 输入不是全部属于一个类型表,抛出一个错误.

  3. 选取第一个属于该表中优选类型的非未知输入类型。 或者是第一个允许所有非未知输入隐含转换成它的类型。

  4. 把所有输入转换成所选类型.

例子

Example 7-7. Union 中的待定类型

tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b';
 Text
------
 a
 b
(2 rows)

这里,unknown 类型文本'b'将被解析成类型 text.

Example 7-8. 简单 Union 中的类型转换

tgl=> SELECT 1.2 AS "Numeric" UNION SELECT 1;
 Numeric
---------
       1
     1.2
(2 rows)

文本 1.2 类型为 numeric, 而且整数1可以隐含地转换为numeric, 因此使用这个类型.

Example 7-9. 转换的 Union 中的类型转换

tgl=> SELECT 1 AS "Real"
tgl-> UNION SELECT CAST('2.2' AS REAL);
 Real
------
    1
  2.2
(2 rows)

这里,因为类型 real 不能被隐含转换成 integer, 但是 integer 可以隐含转换成 real,那么联合的结果类型 分析成 real