?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
SQLUNION結(jié)構(gòu)必須匹配可能不同的類型成為一個單一的結(jié)果設(shè)置。
該解決算法分別應用到一個關(guān)聯(lián)查詢的每個輸出列。
INTERSECT和EXCEPT結(jié)構(gòu)在同一路徑中像UNION一樣決定不同的類型。
CASE, ARRAY, VALUES,GREATEST
和LEAST
結(jié)構(gòu)使用相同的算法來匹配構(gòu)成的表達式和查詢一個結(jié)果數(shù)據(jù)類型。
UNION, CASE,和相關(guān)構(gòu)造的類型分析
如果所有的輸入為相同格式,并且是未知類型,那么解決該類型。 否則,用它們的底層基本類型取代在列表中的任何域類型。
如果所有的輸入為unknown類型,決定作為text(字符分類的優(yōu)先格式)類型。 否則,未知輸入是被忽略的。
如果非未知輸入不為所有的相同類型分類,那么將失敗。
如果有的話,選擇第一個在分類中首選的非未知輸入類型。
否則,選擇最后的非未知輸入類型,它允許所有在非未知輸入之前隱含地轉(zhuǎn)換為它。 (總有這樣的一種類型,因為最總在列表中的第一個類型必須滿足該條件。)
轉(zhuǎn)換所有的輸入為選定的類型。如果沒有一個從所給輸入到選定類型的轉(zhuǎn)換將會失敗。
下面是一些例子。
Example 10-7. 在一個關(guān)聯(lián)中使用規(guī)定中的類型的類型解析
SELECT text 'a' AS "text" UNION SELECT 'b'; text ------ a b (2 rows)
這里,未知類型文字'b'將被作為text類型來處理。
Example 10-8. 在一個簡單關(guān)聯(lián)中的類型解析
SELECT 1.2 AS "numeric" UNION SELECT 1; numeric --------- 1 1.2 (2 rows)
文字1.2是numeric類型,且integer值1 可以隱含地轉(zhuǎn)換為numeric,因此使用那種類型。
Example 10-9. 在一個可換位關(guān)聯(lián)中的類型解析
SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL); real ------ 1 2.2 (2 rows)
這里,因為real類型不能隱含地轉(zhuǎn)換為integer,但是integer 能隱含地轉(zhuǎn)換為real,所以關(guān)聯(lián)結(jié)果類型將作為real。