| PostgreSQL | ||
|---|---|---|
| 上一頁 | 第六章. 型態轉換 | 下一頁 |
運算符號評估
在分類裡只有一個指數運算符號,它以 float8 作為參數。掃描器給下面查詢表達式的兩個參數賦予int4 的初始型態:
tgl=> select 2 ^ 3 AS "Exp"; Exp --- 8 (1 row)
分析器對兩個參數都做型態轉換,查詢等效於:
tgl=> select float8(2) ^ float8(3) AS "Exp"; Exp --- 8 (1 row)
或
tgl=> select 2.0 ^ 3.0 AS "Exp"; Exp --- 8 (1 row)
注意 最後的形式最高效,因為不用調用函數做隱含型態轉換。這對小查詢沒有什麼影響,但可能對那些操作大表的查詢的性能產生較大影響。
一種類字符串的語法既可以用於字符串也可以用於複雜的擴展型態。包含不明型態的字串使用可能的候選運算符號匹配。
有一個未聲明的參數:
tgl=> SELECT text 'abc' || 'def' AS "Text and Unknown"; Text and Unknown ---------------- abcdef (1 row)
本例中分析器尋找一個兩個參數都是 text 的運算符號。因為有一個這樣的運算符號,它認為另一個參數的型態是text。
聯接未聲明型態:
tgl=> SELECT 'abc' || 'def' AS "Unspecified"; Unspecified ----------- abcdef (1 row)
本例中對型態的初始值沒有任何暗示,因為查詢中沒有聲明任何型態。因此,分析器查找所有參數都是字符串類的候選運算符號。並且它選擇"優選型態"text作為本查詢字符串類的型態。
注意: 如果用戶定義了一個新的數據型態,並且定義了用於該型態的運算符號 “||” ,那麼本查詢將不會像上面寫的那樣成功完成。這時分析器會因為現在有兩類候選運算符號而無法決定使用哪個。
本例演示了一個有趣的結果。一般來說,階乘只用於整數,Postgres 運算符號類別刈谻於階乘的只有一個,其以整數為操作數。如果輸入一個非整數數字參數。Postgres 將試圖把該參數轉換成整數進行階乘運算。
tgl=> select (4.3 !);
?column?
--------
24
(1 row)
注意: 這樣做當然會導致一個數學上有疑問的結果,因為非整數的階乘原則沒有定義。但是,資料庫的角色不是數學教學,而是數據操作。如果用戶一定要進行浮點數的階乘,Postgres 將盡可能服從。
| 上一頁 | 首頁 | 下一頁 |
| 型態轉換 | 開頭 | 函數 |