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 代表一個未知 的數值,因此我們無法知道兩個未知的數值是否相等.)

有些應用可能(不正確)地要求表達式 expression = NULLexpression 得出 NULL 值地時候返回真。 為了支持這種應用,我們可以打開運行時選項 transform_null_equals (也就是說 SET transform_null_equals TO ON;)。 這樣 PostgreSQL 將把 x = NULL 子句轉換成 x IS NULL。 在版本 6.5 到 7.1 之間,這是缺省的行為。

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

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

這些構造類似 IS NULL,因為它們將總是返回 TRUE 或者 FALSE,決不會返回 NULL,即時它們的操作數是 NULL 也一樣. NULL 輸入被當做邏輯數值"unknown"