PostgreSQL 8.2.3 中文文档
后退快退章10. 类型转换快进前进

10.5. UNION, CASE 和相关构造

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

UNION, CASE 和相关构造的类型解析

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

  2. 如果非 unknown 输入不属于同一个类型范畴,失败。

  3. 选取第一个属于该范畴中首选类型的非 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 ,那么联合的结果类型将是 real


后退首页前进
值存储上一级索引