9.2. 比較操作符

可用的比較操作符在 Table 9-1 顯示。

Table 9-1. 比較操作符

操作符描述
< 小於
> 大於
<= 小於或等於
>= 大於或等於
= 等於
<>!= 不等於

注意: != 操作符在分析器階段被轉換成 <>。把 !=<> 操作符實現為做不同的事是不可能的。

比較操作符可以用於所有可以比較的資料類型。 所有比較操作符都是雙目操作符,返回 boolean 類型數值; 象1 < 2 < 3 這樣的資料表達式是非法的 (因為沒有什麼 < 操作符用於 在布爾值和3之間做比較)。

除了比較操作符以外,我們還可以使用 BETWEEN 構造。

a BETWEEN x AND y

等效於

a >= x AND a <= y

類似的還有

a NOT BETWEEN x AND y

等效於

a < x OR a > y

這兩種形式之間沒有甚麼區別,只不過第一種形式需要一些 CPU 週期在內部將它改寫成第二種形式。

要檢查一個值是否為 NULL,使用下面構造

expression IS NULL
expression IS NOT NULL

或者等效,但並不標準的構造

expression ISNULL
expression NOTNULL

不要expression = NULL 因為 NULL 是不"等於" NULL 的。(NULL 代資料表一個未知的數值,因此我們無法知道兩個未知的數值是否相等。) 這個行為遵循 SQL 標準。

提示: 有些應用可能要求資料表達式 expression = NULLexpression 得出 NULL 值地時候返回真。 我們強烈建議這樣的應用修改成遵循 SQL 標準。但是,如果這樣修改是不可能的,那麼我們可以使用配置變量 transform_null_equals。 如果打開它, PostgreSQL 將把 x = NULL 子句轉換成 x IS NULL。 在 PostgreSQL 版本 6.5 到 7.1 之間,這是預設的行為。

如果有任何一個輸入是空,那麼普通的比較操作符生成空(資料表示"未知")。 另外一個比較的方法是用 IS DISTINCT FROM 構造:

expression IS DISTINCT FROM expression

對於非空輸入,這個與 <> 操作符相同。 但是,假如兩個輸入都是空,那麼它將返回假,而如果只有一個輸入是空,那麼它將返回真。 這樣就很有效地把空當作一個普通地資料值看待,而不是"未知"

布爾數值可以用下面的構造進行測試

expression IS TRUE
expression IS NOT TRUE
expression IS FALSE
expression IS NOT FALSE
expression IS UNKNOWN
expression IS NOT UNKNOWN

這些構造將總是返回真或假,從來不返回空值,即使操作數是空也如此。 空值輸入被當做邏輯數值"未知"。 請注意實際上 IS UNKNOWNIS NOT UNKNOWN 分別與 IS NULLIS NOT NULL 相同, 只是輸入資料表達式必須是布爾類型。