PostgreSQL中可用的SQL兼容的條件表達(dá)式。
如果你的需求超過(guò)這些條件表達(dá)式的能力,你可能會(huì)希望用一種更富表現(xiàn)力的編程語(yǔ)言寫一個(gè)存儲(chǔ)過(guò)程。SQL CASE表達(dá)式是一種通用的條件表達(dá)式,類似于其它編程語(yǔ)言中的 if/else 語(yǔ)句:
CASE WHEN condition THEN result [WHEN …] [ELSE result] END
CASE子句可以用于任何表達(dá)式可以出現(xiàn)的地方。每一個(gè)condition是一個(gè)返回boolean結(jié)果的表達(dá)式。如果結(jié)果為真,那么CASE表達(dá)式的結(jié)果就是符合條件的result,并且剩下的CASE表達(dá)式不會(huì)被處理。如果條件的結(jié)果不為真,那么以相同方式搜尋任何隨后的WHEN子句。如果沒(méi)有WHEN condition為真,那么CASE表達(dá)式的值就是在ELSE子句里的result。如果省略了ELSE子句而且沒(méi)有條件為真,結(jié)果為空。
-- Example:postgres=# SELECT * FROM t_1 ORDER BY 1, 2; num | name -----+------ 1 | a 2 | b 3 | c 4 | a(4 rows)postgres=# SELECT num,postgres-# CASE num WHEN 1 THEN 'one'postgres-# WHEN 2 THEN 'two'postgres-# WHEN 3 THEN 'three'postgres-# ELSE 'other'postgres-# END postgres-# FROM t_1 postgres-# ORDER BY 1, 2; num | case -----+------- 1 | one 2 | two 3 | three 4 | other(4 rows)所有result表達(dá)式的數(shù)據(jù)類型都必須可以轉(zhuǎn)換成單一的輸出類型。
COALESCE(value [, …]) COALESCE函數(shù)返回它的第一個(gè)非空參數(shù)的值。當(dāng)且僅當(dāng)所有參數(shù)都為空時(shí)才會(huì)返回空。它常用于在為顯示目的檢索數(shù)據(jù)時(shí)用缺省值替換空值。
--Examplepostgres=# SELECT coalesce(NULL, NULL, num) FROM t_1 order by 1; coalesce ---------- 1 2 3 4(4 rows)和CASE表達(dá)式一樣,COALESCE將不會(huì) 計(jì)算無(wú)助于判斷結(jié)果的參數(shù);也就是說(shuō),在第一個(gè)非空參數(shù)右邊的參數(shù)不會(huì)被計(jì)算。這個(gè) SQL 標(biāo)準(zhǔn)函數(shù)提供了類似于NVL和IFNULL的能力,它們被用在某些其他數(shù)據(jù)庫(kù)系統(tǒng)中。
NULLIF(value1, value2) 當(dāng)value1和value2相等時(shí),NULLIF返回一個(gè)空值。 否則它返回value1。 這些可以用于執(zhí)行前文給出的COALESCE例子的逆操作:
postgres=# SELECT nullif(num::text, name) FROM t_1 order by 1; nullif -------- 1 2 3 4(4 rows)GREATEST(value [, …]) LEAST(value [, …]) GREATEST和LEAST函數(shù)從一個(gè)任意的數(shù)字表達(dá)式列表里選取最大或者最小的數(shù)值。 這些表達(dá)式必須都可以轉(zhuǎn)換成一個(gè)普通的數(shù)據(jù)類型,它將會(huì)是結(jié)果類型 。列表中的 NULL 數(shù)值將被忽略。只有所有表達(dá)式的結(jié)果都是 NULL 的時(shí)候,結(jié)果才會(huì)是 NULL。
請(qǐng)注意GREATEST和LEAST都不是 SQL 標(biāo)準(zhǔn),但卻是很常見(jiàn)的擴(kuò)展。某些其他數(shù)據(jù)庫(kù)讓它們?cè)谌魏螀?shù)為 NULL 時(shí)返回 NULL,而不是在所有參數(shù)都為 NULL 時(shí)才返回 NULL。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注