====================  SELECT的输出列 ==================== .. container:: sect1 :name: TYPECONV-SELECT .. container:: titlepage .. container:: .. container:: .. rubric:: ``SELECT``\ 的输出列 :name: select的输出列 :class: title 前面的小节中给出的规则将会导致对SQL查询中的所有表达式分配非\ ``unknown``\ 数据类型,不过作为\ ``SELECT``\ 命令的简单输出列出现的未指定类型的文本除外。例如,在 .. code:: screen SELECT 'Hello World'; 中没有标识该字符串应该取何种类型。在这种情况下,PostgreSQL将会退而求其次将其类型决定为\ ``text``\ 。 当\ ``SELECT``\ 处于\ ``UNION``\ (或者\ ``INTERSECT``\ ,或者\ ``EXCEPT``\ )结构的一边或者出现在\ ``INSERT ... SELECT``\ 中时,这条规则就不适用了,因为在前面小节中给出的规则会优先。在第一种情况下未指定类型文本的类型将从\ ``UNION``\ 的另一边取得,而在第二种情况下未指定类型文本的类型将从目标列取得。 出于这样的目的,\ ``RETURNING``\ 列表采用和\ ``SELECT``\ 输出列表同样的方式对待。 .. note:: .. rubric:: 注意 :name: 注意 :class: title 在PostgreSQL 10之前,这条规则还不存在,\ ``SELECT``\ 输出列表中未指定类型的文本的类型会被留成\ ``unknown``\ 。这样做会导致各种不好的后果,因此新版本中做出了改变。