SQL 関数: upper、 lower、 trim 照合順序指定子を持つ列の引き渡し¶
upper と lower 照合順序指定子 は、文字列を比較する前に文字列を大文字または小文字に(それぞれ)変換します。 trim 照合順序指定子は、文字列を比較する前に先頭と末尾のスペースを削除します。
これらの指定子を持つ列を SQL 関数のいくつかに渡すと、以下のように動作が変わります。
- 変更前:
LIKE 関数は
upper、lower、trim指定子を無視し、大文字小文字を区別して比較します。また、以下の関数は
upper、lower、trim指定子を持つ列をサポートしていません。LIKE 関数のバリアント:
これらの関数に
upper、lower、またはtrim指定子を持つ列を渡すと、コンパイルエラーが発生します。- 変更後:
LIKE 関数は
upper、lower、trim指定子を尊重し、大文字と小文字を区別せずに比較します。その結果、 LIKE 関数を使用したクエリは、追加の行を返す可能性があります(以下の例を参照)。
LIKE 関数は、ロケール指定子(例:
en-upper)との組み合わせをサポートしていないことに注意してください。さらに、以下の関数が
upper、lower、およびtrim指定子のある列をサポートするようになりました。LIKE 関数のバリアント:
LIKE ALL
LIKE ANY
ILIKE ANY
CONTAINS
ENDSWITH
POSITION
REPLACE
SPLIT
SPLIT_PART
STARTSWITH
LIKE 関数への変更の影響例¶
上述したように、列が upper、 lower、または trim 指定子を持つ場合、 LIKE 関数を使用したクエリは追加の行を返す可能性があります。たとえば、あるテーブルに lower 指定子を持つ列があるとします。テーブル中のテキストは大文字と小文字が異なるとします。
動作変更前は、 LIKE 関数を使用する以下の各クエリが値 'abc' を持つ1行を返します。
動作変更後も、LIKE 関数で lower 仕様列を使用しないクエリは1行を返します。
しかし、 COLLATE 関数を使用して lower を指定するクエリと、 lower 仕様のある列を LIKE 関数に渡すクエリは、2行を返します。
これは ILIKE とほぼ等しくなります。これらのクエリに変更があるかどうかを判断するには、これらのクエリの LIKE を ILIKE に置き換えます。
変更前の動作の維持¶
列が upper、 lower、または trim 指定を使用しており、変更前の動作を保持する場合は、 COLLATE 関数を空の指定で使用して、列に関連付けられた upper、 lower、または trim の指定を使用しないことを示すことができます。
注釈
この方法を LIKE 関数で使用する場合は、サブジェクトとパターンの両方に照合順序仕様が適用されていないことを確認してください。
参照: 1535