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