すべてのプロダクト
Search
ドキュメントセンター

PolarDB:比較関数と演算子

最終更新日:May 31, 2024

このトピックでは、PolarDB for PostgreSQL (Compatible with Oracle) でサポートされている比較関数と演算子について説明します。

次の表に示すように、通常の比較演算子を使用できます。

比較演算子

演算子

説明

datatype < datatypeboolean

未満

datatype > datatypeboolean

datatype <= datatypeboolean

以下

datatype >= datatypeboolean

以上

datatype=datatypeboolean

等しい

datatype <> datatypeboolean

等しくない

datatype!=datatypeブール値

等しくない

重要

<>は「等しくない」の標準SQL表記です。!=はエイリアスであり、<>解析の非常に初期の段階で。 したがって、実装することはできません!=<>さまざまなことを行う演算子。

これらの比較演算子は、数値型、文字列型、日付 /時刻型など、自然な順序を持つすべての組み込みデータ型で使用できます。 さらに、配列、複合型、および範囲は、それらのコンポーネントデータ型が比較可能である場合に比較することができる。

通常、関連するデータ型の値も比較できます。たとえば、integer > bigintが機能します。 この種のいくつかのケースは、「クロスタイプ」比較演算子によって直接実装されますが、そのような演算子が利用できない場合、パーサーは、より一般的でないタイプをより一般的なタイプに強制し、後者の比較演算子を適用します。

上記のように、すべての比較演算子は、boolean型の値を返すバイナリ演算子です。 したがって、1 < 2 < 3のような式は有効ではありません (ブール値を3と比較する < 演算子がないため) 。 範囲テストを実行するには、以下に示すBETWEEN述語を使用します。

以下の表に示すように、いくつかの比較述語もあります。 これらは演算子のように動作しますが、SQL標準によって義務付けられた特別な構文があります。

比較述語

datatype BETWEEN datatype AND datatypeboolean

間 (範囲のエンドポイントを含む) 。

2 1と3の間 → t

2 3と1の間 → f

datatype NOT BETWEEN datatype AND datatypeboolean

(betweenの否定) の間ではありません。

2 1と3の間ではないf

datatype BETWEEN SYMMETRIC datatype AND datatypeboolean

その間、2つのエンドポイント値をソートした後。

2 SYMMETRIC 3と1の間 → t

datatype NOT BETWEEN SYMMETRIC datatype AND datatypeboolean

2つのエンドポイント値をソートした後、その間ではありません。

2シンドローム3と1の間ではないf

datatype IS DISTINCT FROM datatypeboolean

同じではなく、nullを同等の値として扱います。

1 IS DISTINCT FROM NULLt (NULLではなく)

NULL IS DISTINCT FROM NULLf (NULLではなく)

datatype IS NOT DISTINCT FROM datatypeboolean

等しい、比較可能な値としてヌルを扱う。

1 IS NOT DISTINCT FROM NULLf (NULLではなく)

NULL IS NOT DISTINCT FROM NULLt (NULLではなく)

datatype IS NULLboolean

値がnullかどうかをテストします。

1.5 IS NULL f

datatype IS NOT NULLboolean

値がnullでないかどうかをテストします。

'null' IS NOT NULLt

datatype ISNULLboolean

値がnullかどうかをテストします (非標準構文) 。

datatype NOTNULLブール値

値がnullでないかどうかをテストします (非標準構文) 。

boolean IS TRUEboolean

ブール式がtrueになるかどうかをテストします。

true IS TRUEt

NULL::boolean IS TRUEf (NULLではなく)

boolean IS NOT TRUEboolean

ブール式がfalseか不明かをテストします。

true IS NOT TRUEf

NULL::boolean IS NOT TRUEt (NULLではなく)

boolean IS FALSEboolean

ブール式がfalseになるかどうかをテストします。

true IS FALSEf

NULL::boolean IS FALSEf (NULLではなく)

boolean IS NOT FALSEboolean

ブール式がtrueか不明かをテストします。

true IS NOT FALSEt

NULL::boolean IS NOT FALSEt (NULLではなく)

ブール不明ブール

ブール式が不明になるかどうかをテストします。

true IS UNKNOWNf

NULL::boolean IS UNKNOWNt (NULLではなく)

ブール不明ブール

ブール式がtrueかfalseかをテストします。

trueは不明t

NULL::boolean IS NOT UNKNOWNf (NULLではなく)

BETWEEN述語は、範囲テストを簡素化します。

a xとyの間

に相当します。

a >= x AND a <= y

BETWEENはエンドポイント値を範囲に含まれるものとして扱います。BETWEEN SYMMETRICBETWEENに似ていますが、ANDの左側の引数が右側の引数以下である必要はありません。 そうでない場合、これらの2つの引数は自動的に交換され、空でない範囲が常に暗示されます。

BETWEENのさまざまなバリエーションは、通常の比較演算子の観点から実装されているため、比較可能な任意のデータ型に対して機能します。

重要

BETWEEN構文でANDを使用すると、論理演算子としてANDを使用することであいまいさが生じます。 これを解決するには、BETWEEN句の2番目の引数として、限定された式型のセットのみが許可されます。 より複雑なサブ式をBETWEENに記述する必要がある場合は、サブ式の周りに括弧を書きます。

通常の比較演算子は、どちらかの入力がnullの場合、trueまたはfalseではないnull (「不明」を意味する) を生成します。 たとえば、7 = NULLはnullを生成し、7 <> NULLも生成します。 この動作が適切でない場合は、is [not] DISTINCT FROM述語を使用します。

aはbから離れています
    aはb
から離れていません

null以外の入力の場合、IS DISTINCT FROM<> 演算子と同じです。 ただし、両方の入力がnullの場合はfalseを返し、一方の入力のみがnullの場合はtrueを返します。 同様に、IS NOT DISTINCT FROMは、非null入力の場合=と同じですが、両方の入力がnullの場合はtrueを返し、一方の入力のみがnullの場合はfalseを返します。 したがって、これらの述語は、ヌルが「未知」ではなく正常なデータ値であるかのように効果的に作用する。

値がnullであるかどうかを確認するには、述語を使用します。

式IS NULL
    式はNULLではない 

または同等の、しかし非標準の述語:

式ISNULL
    式NOTNULL 

NULLNULLに等しくないため、= NULLを書き込まないでください。 (null値は未知の値を表し、2つの未知の値が等しいかどうかは不明です。)

重要

一部のアプリケーションでは、expressionがNULL値に評価された場合、=nullがtrueを返すと予想されます。 これらのアプリケーションは、SQL標準に準拠するように変更することを強くお勧めします。 ただし、これを実行できない場合は、設定変数transform_null_equalsを使用できます。 有効にすると、PostgreSQLはx = NULL句をx is NULLに変換します。

が行値の場合、行式自体がNULLの場合、または行のすべてのフィールドがnullの場合はis nullがtrueになり、行式自体がNULLでなく、行のすべてのフィールドがnullでない場合はIS NOT nullがtrueになります。 この動作のため、IS NULLIS NOT NULLは、行値式に対して常に逆の結果を返すとは限りません。特に、nullフィールドとnull以外のフィールドの両方を含む行値式は、両方のテストでfalseを返します。 場合によっては、row IS DISTINCT FROM NULLまたはrow IS NOT DISTINCT FROM NULLを書き込むことが好ましい場合があります。

述語を使用してブール値をテストすることもできます。

bolean_expressionはTRUE
    boolean_expressionは正しくありません
    boolean_expressionは間違っています
    boolean_expressionは偽ではありません
    boolean_expressionは不明です
    boolean_expressionは不明
ではありません

これらは、オペランドがnullの場合でも、常にtrueまたはfalseを返し、null値は返しません。 ヌル入力は、論理値「unknown」として扱われる。 IS UNKNOWNおよびIS NOT UNKNOWNは、入力式がブール型でなければならないことを除いて、それぞれIS NULLおよびIS NOT NULLと実質的に同じであることに注意してください。

比較関数

以下の表に示すように、いくつかの比較関連関数も利用できます。

num_nonnnull (VARIADIC "any") → integer

null以外の引数の数を返します。

num_nonnnull (1, NULL, 2)2

num_nulls (VARIADIC "any") → integer

null引数の数を返します。

num_nulls(1, NULL, 2)1