PostgreSQL函數(shù)與操作符-比較函數(shù)和操作符
PostgreSQL中的比較函數(shù)和操作符
PostgreSQL中的比較函數(shù)和操作符用于比較兩個(gè)表達(dá)式的值。它們的作用是確定表達(dá)式的值是否滿足某種條件,例如等于、大于、小于等。
比較函數(shù)是一個(gè)接受兩個(gè)參數(shù)的函數(shù),返回一個(gè)布爾值,表示兩個(gè)參數(shù)是否滿足某種條件。例如,equal()函數(shù)用于判斷兩個(gè)參數(shù)是否相等,greater than()函數(shù)用于判斷第一個(gè)參數(shù)是否大于第二個(gè)參數(shù)。
比較操作符是一種特殊的函數(shù),使用符號(hào)表示,例如=表示等于,>表示大于,<表示小于等。比較操作符可以直接應(yīng)用于表達(dá)式,返回一個(gè)布爾值。
比較函數(shù)和操作符在使用上有所不同。比較函數(shù)可以用于任意類型的表達(dá)式,而比較操作符只能用于特定類型的表達(dá)式。此外,比較函數(shù)更加靈活,可以自定義比較規(guī)則,而比較操作符的比較規(guī)則是固定的。
在使用比較函數(shù)和操作符時(shí),可以通過組合多個(gè)比較條件來(lái)構(gòu)建復(fù)雜的比較表達(dá)式。例如,可以使用AND、OR等邏輯操作符來(lái)連接多個(gè)比較條件,以實(shí)現(xiàn)更靈活的比較。
總的來(lái)說(shuō),比較函數(shù)和操作符在比較表達(dá)式的值時(shí)起到了關(guān)鍵作用,它們可以用于判斷兩個(gè)值的大小關(guān)系、相等關(guān)系等,并且可以根據(jù)需要進(jìn)行靈活的組合和擴(kuò)展。
PostgreSQL常見的比較操作符都可用,如下表所示。
操作符 | 描述 |
---|---|
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
= | 等于 |
<> or != | 不等于 |
比較操作符可以用于所有可以比較的數(shù)據(jù)類型。所有比較操作符都是雙目操作符,它們返回boolean類型;類似于1 < 2 < 3的表達(dá)式是非法的(因?yàn)闆]有<操作符可以比較一個(gè)布爾值和3)。
如下表所示,也有一些比較謂詞。它們的行為和操作符很像,但是具有 SQL 標(biāo)準(zhǔn)所要求的特殊語(yǔ)法。
謂詞 | 描述 |
---|---|
a BETWEEN x AND y | 在x和y之間 |
a NOT BETWEEN x AND y | 不在x和y之間 |
a BETWEEN SYMMETRIC x AND y | 在對(duì)比較值排序后位于x和y之間 |
a NOT BETWEEN SYMMETRIC x AND y | 在對(duì)比較值排序后不位于x和y之間 |
a IS DISTINCT FROM b | 不等于,空值被當(dāng)做一個(gè)普通值 |
a IS NOT DISTINCT FROM b | 等于,空值被當(dāng)做一個(gè)普通值 |
expression | IS NULL |
expression IS NOT NULL | 不是空值 |
expression ISNULL | 是空值(非標(biāo)準(zhǔn)語(yǔ)法) |
expression NOTNULL | 不是空值(非標(biāo)準(zhǔn)語(yǔ)法) |
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 | 為真或者為假 |
ETWEEN謂詞可以簡(jiǎn)化范圍測(cè)試:
a BETWEEN x AND y
等效于
a >= x AND a <= y
注意BETWEEN認(rèn)為終點(diǎn)值是包含在范圍內(nèi)的。 NOT BETWEEN可以做相反比較:
a NOT BETWEEN x AND y
等效于
a < x OR a > y
BETWEEN SYMMETRIC和BETWEEN相似,不過BETWEEN SYMMETRIC不要求AND左邊的參數(shù)小于或等于右邊的參數(shù)。如果左參數(shù)不是小于等于右參數(shù),這兩個(gè)參數(shù)會(huì)自動(dòng)被交換,這樣總是會(huì)應(yīng)用一個(gè)非空范圍。
當(dāng)有一個(gè)輸入為空時(shí),普通的比較操作符會(huì)得到空(表示“未知”),而不是真或假。例如,7 = NULL得到空,7 <> NULL也一樣。如果這種行為不合適,可以使用IS [ NOT ] DISTINCT FROM謂詞:
a IS DISTINCT FROM b
a IS NOT DISTINCT FROM b
對(duì)于非空輸入,IS DISTINCT FROM和<>操作符一樣。不過,如果兩個(gè)輸入都為空,它會(huì)返回假。而如果只有一個(gè)輸入為空,它會(huì)返回真。類似地,IS NOT DISTINCT FROM對(duì)于非空輸入的行為與=相同,但是當(dāng)兩個(gè)輸入都為空時(shí)它返回真,并且當(dāng)只有一個(gè)輸入為空時(shí)返回假。因此,這些謂詞實(shí)際上把空值當(dāng)作一種普通數(shù)據(jù)值而不是“unknown”。
要檢查一個(gè)值是否為空,使用下面的謂詞:
expression IS NULL
expression IS NOT NULL
或者等效,但并不標(biāo)準(zhǔn)的謂詞:
expression ISNULL
expression NOTNULL
不要寫expression = NULL,因?yàn)镹ULL是不“等于”NULL的(控制代表一個(gè)未知的值,因此我們無(wú)法知道兩個(gè)未知的數(shù)值是否相等)。
提示:有些應(yīng)用可能要求表達(dá)式expression = NULL在expression得出空值時(shí)返回真。我們強(qiáng)烈建議這樣的應(yīng)用修改成遵循
SQL
標(biāo)準(zhǔn)。但是,如果這樣修改不可能完成,那么我們可以使用配置變量transform_null_equals。如果打開它,PostgreSQL將把x
= NULL子句轉(zhuǎn)換成x IS NULL。
如果expression是行值,那么當(dāng)行表達(dá)式本身為非空值或者行的所有域?yàn)榉强諘r(shí)IS NULL為真。由于這種行為,IS NULL和IS NOT NULL并不總是為行值表達(dá)式返回反轉(zhuǎn)的結(jié)果,特別是,一個(gè)同時(shí)包含 NULL 和非空值的域?qū)?huì)對(duì)兩種測(cè)試都返回假。在某些情況下,寫成row IS DISTINCT FROM NULL或者row IS NOT DISTINCT FROM NULL會(huì)更好,它們只會(huì)檢查整個(gè)行值是否為空而不需要在行的域上做額外的測(cè)試。
布爾值也可以使用下列謂詞進(jìn)行測(cè)試:
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
這些謂詞將總是返回真或假,從來(lái)不返回空值,即使操作數(shù)是空也如此。空值輸入被當(dāng)做邏輯值“未知”。 請(qǐng)注意實(shí)際上IS UNKNOWN和IS NOT UNKNOWN分別與IS NULL和IS NOT NULL相同, 只是輸入表達(dá)式必須是布爾類型。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-796363.html
如下表中所示,也有一些比較相關(guān)的函數(shù)可用。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-796363.html
函數(shù) | 描述 | 例子 | 例子結(jié)果 |
---|---|---|---|
num_nonnulls(VARIADIC “any”) | 返回非空參數(shù)的數(shù)量 | num_nonnulls(1, NULL, 2) | 2 |
num_nulls(VARIADIC “any”) | 返回空參數(shù)的數(shù)量 | num_nulls(1, NULL, 2) | 1 |
到了這里,關(guān)于【PostgreSQL】函數(shù)與操作符-比較函數(shù)和操作符的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!