返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

10.5. UNION, CASE 和相关构造

发布于 2019-09-30 03:06:34 字数 1418 浏览 1085 评论 0 收藏 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文