PostgreSQL 9.3.4 文档 | ||||
---|---|---|---|---|
Prev | Up | Chapter 10. 类型转换 | Next |
SQL UNION结构必须使可能不相似的类型匹配成为一个单一的结果集。该决定算法被独立地应用到一个联合查询的每个输出列。 INTERSECT和EXCEPT采用和UNION相同的方法来决定不相似的类型。CASE、ARRAY、VALUES、GREATEST
和LEAST
结构使用相同的算法来使它们的组成表达式匹配并选择一种结果数据类型。
UNION、CASE和相关结构的类型决定
如果所有的输入为相同类型,并且不是unknown,那么就决定是该类型。否则,将列表中的任何域类型替换成它们的底层基本类型。
如果所有的输入为unknown类型,则决定为text(字符串分类的首选类型)类型。否则,unknown输入被忽略。
如果非未知输入不全是相同的类型分类,则失败。
如果有的话,选择第一个在其分类中作为首选类型的非未知输入类型。
否则,选择最后的非未知输入类型,它允许所有在前面的非未知输入被隐式地转换为它(总有这样的一种类型,因为至少在列表中的第一个类型必须满足这个条件)。
转换所有的输入为选定的类型。如果没有一个从给定输入到选定类型的转换将会失败。
下面是一些例子。
Example 10-8. 联合中未指定类型的类型决定
SELECT text 'a' AS "text" UNION SELECT 'b'; text ------ a b (2 rows)
这里,未知类型文字'b'将被决定为类型text。