天天看點

PostgreSQL 10.1 手冊_部分 II. SQL 語言_第 9 章 函數和操作符_9.2. 比較操作符

9.2. 比較操作符

常見的比較操作符都可用,如

表 9.1

所示。

表 9.1. 比較操作符

操作符 描述

<

小于

>

大于

<=

小于等于

>=

大于等于

=

等于

<>

 or 

!=

不等于

注意

!=

操作符在分析器階段被轉換成

<>

。不能把

!=

<>

操作符實作為做不同的事。

比較操作符可以用于所有可以比較的資料類型。所有比較操作符都是雙目操作符,它們傳回

boolean

類型;類似于

1 < 2 < 3

的表達式是非法的(因為沒有

<

操作符可以比較一個布爾值和

3

)。

表 9.2

所示,也有一些比較謂詞。 它們的行為和操作符很像,但是具有 SQL 标準所要求的特殊文法。

表 9.2. 比較謂詞

謂詞

a

BETWEEN

x

AND

y

在x和y之間

a

NOT BETWEEN

x

AND

y

不在x和y之間

a

BETWEEN SYMMETRIC

x

AND

y

在對比較值排序後位于x和y之間

a

NOT BETWEEN SYMMETRIC

x

AND

y

在對比較值排序後不位于x和y之間

a

IS DISTINCT FROM

b

不等于,空值被當做一個普通值

a

IS NOT DISTINCT FROM

b

等于,空值被當做一個普通值

expression

IS NULL

是空值

expression

IS NOT NULL

不是空值

expression

ISNULL

是空值(非标準文法)

expression

NOTNULL

不是空值(非标準文法)

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

為真或者為假

除了比較操作符以外,特殊的

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. 比較函數

函數 示例 示例結果

num_nonnulls(VARIADIC "any")

傳回非空參數的數量

num_nonnulls(1, NULL, 2)

2

num_nulls(VARIADIC "any")

傳回空參數的數量

num_nulls(1, NULL, 2)

1

本文轉自PostgreSQL中文社群,原文連結: