PostgreSQL 10.1 手册_部分 II. SQL 语言_第 10 章 类型转换_10.5. UNION、CASE和相关结构...

本文详细解析了SQL中UNION、CASE等结构在处理不同类型输入时,如何决定统一的结果数据类型。通过实例展示了当输入类型不同时,系统如何选择和转换类型以形成一致的数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10.5. UNIONCASE和相关结构

SQL UNION结构必须使可能不相似的类型匹配成为一个单一的结果集。该决定算法被独立地应用到一个联合查询的每个输出列。 INTERSECTEXCEPT采用和UNION相同的方法来决定不相似的类型。CASEARRAYVALUESGREATESTLEAST结构使用相同的算法来使它们的组成表达式匹配并选择一种结果数据类型。

UNIONCASE和相关结构的类型决定

  1. 如果所有的输入为相同类型,并且不是unknown,那么就决定是该类型。

  2. 如果任何输入是一种域类型,在所有后续步骤中都把它当做 该域的基类型。 [9]

  3. 如果所有的输入为unknown类型,则决定为text(字符串分类的首选类型)类型。 否则,为了其余规则,unknown输入被忽略。

  4. 如果非未知输入不全是相同的类型分类,则失败。

  5. 如果有的话,选择第一个在其分类中作为首选类型的非未知输入类型。

  6. 否则,选择最后的非未知输入类型,它允许所有在前面的非未知输入被隐式地转换为它(总有这样的一种类型,因为至少在列表中的第一个类型必须满足这个条件)。

  7. 转换所有的输入为选定的类型。如果没有一个从给定输入到选定类型的转换将会失败。

下面是一些例子。

例 10.9. 联合中未指定类型的类型决定

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

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

这里,未知类型文字'b'将被决定为类型text


例 10.10. 简单联合中的类型决定

SELECT 1.2 AS "numeric" UNION SELECT 1;

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

文字1.2numeric类型,且integer1可以被隐式地造型为numeric,因此使用numeric类型。


例 10.11. 可换位联合中的类型决定

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

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

这里,由于类型real被能被隐式地造型为integer,而integer可以被隐式地造型为real,联合结果类型被决定为real




[9] 多少有些类似于对待用于操作符和函数的域输入的方式,这种行为允许 一种域类型能通过一个UNION或相似的结构保留下来, 只要用户小心地确保所有的输入都是(显式地或隐式地)准确类型。否 则会优先选择该域的基类型。

本文转自PostgreSQL中文社区,原文链接:10.5. UNIONCASE和相关结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值