9.2. 比較操作符
常見的比較操作符都可用,如
表 9.1所示。
表 9.1. 比較操作符
操作符 | 描述 |
---|---|
| 小于 |
| 大于 |
| 小于等于 |
| 大于等于 |
| 等于 |
or | 不等于 |
注意
!=
操作符在分析器階段被轉換成
<>
。不能把
!=
和
<>
操作符實作為做不同的事。
比較操作符可以用于所有可以比較的資料類型。所有比較操作符都是雙目操作符,它們傳回
boolean
類型;類似于
1 < 2 < 3
的表達式是非法的(因為沒有
<
操作符可以比較一個布爾值和
3
)。
如
表 9.2所示,也有一些比較謂詞。 它們的行為和操作符很像,但是具有 SQL 标準所要求的特殊文法。
表 9.2. 比較謂詞
謂詞 | |
---|---|
| 在x和y之間 |
| 不在x和y之間 |
| 在對比較值排序後位于x和y之間 |
| 在對比較值排序後不位于x和y之間 |
| 不等于,空值被當做一個普通值 |
| 等于,空值被當做一個普通值 |
| 是空值 |
| 不是空值 |
| 是空值(非标準文法) |
| 不是空值(非标準文法) |
| 為真 |
| 為假或未知 |
| 為假 |
| 為真或者未知 |
| 值為未知 |
| 為真或者為假 |
除了比較操作符以外,特殊的
BETWEEN
結構也可以使用:
a BETWEEN x AND y
等效于
a >= x AND a <= y
BETWEEN
認為終點值是包含在範圍内的。
NOT BETWEEN
可以做相反比較:
a NOT BETWEEN x AND y
a < x OR a > y
BETWEEN SYMMETRIC
BETWEEN
相同,不過
BETWEEN SYMMETRIC
不要求
AND
左邊的參數小于或等于右邊的參數。如果左參數不是小于等于右參數,這兩個參數會自動被交換,這樣總是會應用一個非空範圍。
當有一個輸入為空時,普通的比較操作符會得到空(表示“未知”), 而不是真或假。例如,
7 = NULL
得到空,
7 <> NULL
也一樣。如果這種行為不合适,可以使用
IS [ NOT ] DISTINCT FROM
謂詞:
a IS DISTINCT FROM b
a IS NOT DISTINCT FROM b
對于非空輸入,
IS DISTINCT FROM
<>
操作符一樣。不過,如果兩個輸入都為空,它會傳回假。而如果隻有一個輸入為空, 它會傳回真。類似地,
IS NOT DISTINCT FROM
對于非空輸入的行為與
=
相同,但是當兩個輸入都為空時它傳回真, 并且當隻有一個輸入為空時傳回假。是以, 這些謂詞實際上把空值當作一種普通資料值而不是“unknown”。
要檢查一個值是否為空,使用下面的結構:
expression IS NULL
expression IS NOT NULL
或者等效,但并不标準的結構:
expression ISNULL
expression NOTNULL
不要寫
expression
= NULL
,因為
NULL
是不“等于”
NULL
的(控制代表一個未知的值,是以我們無法知道兩個未知的數值是否相等)。這種行為符合 SQL 标準。
提示
有些應用可能要求表達式
expression
= NULL
在
expression
得出空值時傳回真。我們強烈建議這樣的應用修改成遵循 SQL 标準。但是,如果這樣修改不可能完成,那麼我們可以使用配置變量
transform_null_equals。如果打開它,PostgreSQL将把
x = NULL
子句轉換成
x IS NULL
。
布爾值也可以使用下列結構進行測試:
boolean_expression IS TRUE
boolean_expression IS NOT TRUE
boolean_expression IS FALSE
boolean_expression IS NOT FALSE
boolean_expression IS UNKNOWN
boolean_expression IS NOT UNKNOWN
這些結構将總是傳回真或假,從來不傳回空值,即使操作數是空也如此。空值輸入被當做邏輯值“未知”。 請注意實際上
IS UNKNOWN
IS NOT UNKNOWN
分别與
IS NULL
IS NOT NULL
相同, 隻是輸入表達式必須是布爾類型。
表 9.3中所示, 也有一些比較相關的函數可用。
表 9.3. 比較函數
函數 | 示例 | 示例結果 | |
---|---|---|---|
| 傳回非空參數的數量 | | |
| 傳回空參數的數量 | | |
本文轉自PostgreSQL中文社群,原文連結: