2016-11-15 189 views
3

如果執行SELECT 'test', 123,則輸出將爲兩列,第一列爲未知數據類型,第二列爲數據類型爲整數的列。爲什麼postgres將不同類型分配給字符串?

如果執行SELECT DISTINCT 'test', 123,則輸出將爲兩列,第一列爲數據類型爲文本,第二列爲數據類型爲整數的列。

爲什麼添加DISTINCT函數與運行不包含DISTINCT的查詢在數據類型方面有所不同?

回答

8

此行爲在Chapter 10. Type Conversion中描述。

10.1. Overview你可以找到:

如果沒有文字,然後佔位類型未知分配的初始字符串指定的類型,在後期階段得到解決。

要選擇不同的值Postgres必須將字符串文字轉換爲具有相等運算符的類型。這種情況類似於聯合:

select 'abc', 1 
union 
select 'def', 1 

其中第一列被解析爲text。該規則在10.5. UNION, CASE, and Related Constructs描述:

  • 如果所有輸入都是類型未知,解析成類型文本(字符串類別的優選類型)。
  • 相關問題