ヘッダーをスキップ
Oracle® Databaseグローバリゼーション・サポート・ガイド
11gリリース2 (11.2)
B56307-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

5 言語ソートと文字列検索

この章では、Oracleデータベース環境での文字列のソートと検索について説明します。

この章の内容は、次のとおりです。

Oracleデータベースのソート機能の概要

ソート順序は言語によって異なります。さらに、同じアルファベットを使用している文化または国の間でも、文字のソート方法が異なる場合があります。たとえば、デンマークのÆは、Zの後にきます。また、YÜは同じ文字の変形とみなされます。

ソート順序には、大/小文字区別の有無を指定できます。ケースは、大文字であるか小文字であるかの条件を指します。たとえばラテン・アルファベットの場合、Aが大文字で、それに対する小文字がaです。

ソート順序では、発音区別記号を無視するか考慮するかを指定できます。発音区別記号は、文字または文字列の上または下にある記号で、それが付いていない場合の文字とは発音が異なることを示します。たとえば、façadeの場合、セディラ(,)は発音区別記号です。セディラが付いている場合は、cの発音が変化します。

表音的なソート順序や、文字の外観に基づいたソート順序も指定できます。たとえば、東南アジアの表意文字の場合は、画数に基づいたソート順序を指定できます。ソート上の一般的な問題となるものに、結合文字があります。たとえば、伝統的なスペイン語のchは1つの独立した文字であり、ソート順序ではcの後にきます。つまり、正しいソート順序は、cerveza、colorado、cheremoyaのようになります。したがって、文字cは、次にくる文字がhであるかどうかが確認されるまで、ソートされません。

Oracleデータベースには、次のタイプのソートが用意されています。

これらのソートにより、単一言語に応じた正確なソート順序に加えて、多言語ISO規格(ISO 14651)に準拠したソートが実現できます。この規格は、複数言語を同時に処理するように設計されています。

バイナリ・ソートの使用

文字データをソートする方法の1つは、文字コード体系によって定義された文字の数値に基づいています。このようなソートをバイナリ・ソートと呼びます。バイナリ・ソートは最も高速なソート・タイプです。ASCIIやEBCDICの規格では、文字AからZを昇順の数値で定義しているため、英語のアルファベットについてはこのタイプで正しいソート結果が得られます。


注意:

ASCII規格では、大文字はすべて小文字の前にきます。逆に、EBCDIC規格では、小文字はすべて大文字の前にきます。

他の言語で使用されている文字が存在すると、通常、バイナリ・ソートでは正しい結果が得られません。たとえば、文字コード体系で、Äの数値がBの数値より高い場合、昇順のORDER BY問合せでは、ABCABZBCDÄBCの順で文字列が戻ります。表意文字を使用するアジア言語の場合、通常、バイナリ・ソートに言語的な意味はありません。

言語ソートの使用

文字のアルファベット順に一致するソート基準を得るには、文字コード体系内の数値に依存せずに文字をソートする別のソート方法を使用する必要があります。この方法を言語ソートと呼びます。言語ソートでは、各文字を、言語的に適切な文字順序を反映した数値に置換することによって、ソート操作を行います。

Oracleデータベースでは、単一言語ソートと多言語ソートの2種類の言語ソートを提供しています。

この項の内容は、次のとおりです。

単一言語ソート

Oracleデータベースでは、単一言語ソートの場合、文字列は2つの手順で比較されます。最初の手順では、メジャー値テーブルにある文字列全体のメジャー値が比較されます。通常、同じ外観の文字には、同じメジャー値があります。第2の手順では、マイナー値テーブルにあるマイナー値が比較されます。メジャー値とマイナー値はOracleデータベースによって定義されます。Oracleデータベースでは、マイナー値が異なる同じメジャー値を使用して、発音区別記号を持つ文字と大/小文字区別を定義します。

各メジャー・テーブル・エントリには、1文字のUnicodeコード・ポイントとメジャー値が含まれています。Unicodeコード・ポイントは、1文字を表す16ビットのバイナリ値です。

表5-1に、aAäÄおよびbのソートに使用するサンプルの値を示します。

表5-1 絵文字のサンプルとそのソートのメジャー値とマイナー値

絵文字 メジャー値 マイナー値

a

15

5

A

15

10

ä


15

15

Ä


15

20

b

20

5



注意:

単一言語ソートは、Unicode以外のマルチバイト・データベース・キャラクタ・セットには使用できません。データベース・キャラクタ・セットがUnicode以外のマルチバイトである場合に単一言語ソートが指定されている場合、デフォルトのソート順序はデータベース・キャラクタ・セットのバイナリ・ソート順序です。例外の1つに、UNICODE_BINARYがあります。このソートは、すべてのキャラクタ・セットに使用できます。


関連項目:

「Unicodeの概要」

多言語ソート

Oracleデータベースには多言語ソートが用意されているため、複数言語のデータを1つのソートとしてソートできます。この機能は、複雑なソート・ルールや多言語データベースを持つ地域または言語に有効です。さらに、Oracle Database 11gでは、従来のリリースで定義されたすべてのソート順序をサポートしています。

アジア諸国の言語データや多言語データに対しては、ISO 14651規格とUnicode 5.0規格に基づいたソート・メカニズムが用意されています。漢字は、画数、ピンイン(中国語の発音記号)または部首で順序付けされます。

また、多言語ソートでは、標準的な同値化および補助文字を処理できます。標準的な同値化は、文字間または文字列間での基本的な同値化です。たとえば、çは、c,の組合せと同じです。補助文字はUnicodeでのユーザー定義文字または事前定義済の文字であり、特定のコード範囲内の2つのコード・ポイントを必要とします。1つの多言語ソートに最大110万のコード・ポイントを定義できます。

たとえば、Oracleデータベースではフランス語の単一言語ソート(FRENCH)がサポートされていますが、フランス語の多言語ソート(FRENCH_M)を指定できます。_Mは、多言語ソートに対するISO 14651規格を表します。このソート順では、GENERIC_Mソート順に基づき、発音区別記号を右から左へとソートできます。表に多言語データが格納されている場合は、多言語ソートの使用をお薦めします。表にフランス語のみが含まれている場合は、フランス語の単一言語ソートを使用する方がメモリー使用量が少ないため、パフォーマンスは向上します。メモリー使用量が少ないのは、フランス語の単一言語ソートの方が、フランス語の多言語ソートよりも定義されている文字が少ないためです。ソートの有効範囲とパフォーマンスの間には、トレードオフがあります。

多言語ソート・レベル

Oracleデータベースでは、多言語ソートを次の3つの精度レベルで評価します。

1次レベル・ソート

1次レベル・ソートでは、文字aと文字bの相違など、ベース文字間の相違を識別します。abの前にくるか、baの前にくるか、あるいは同等かの定義は、個々のロケールに準じます。文字をバイナリで表現することは、意味のないことです。無視可能な文字には、0(ゼロ)の1次レベルの順序(重み)を割り当てます。その結果、その文字は1次レベルで無視されます。他のレベルでの無視可能文字には、そのレベルで順序0(ゼロ)が割り当てられます。

たとえば、1次レベルでは、batのすべてのバリエーションが、betのすべてのバリエーションより前にきます。どちらの場合も、それぞれのバリエーションは次のように様々な順序で表示されます。

Bat
bat
BAT
BET
Bet
bet

関連項目:

「無視可能文字」

2次レベル・ソート

2次レベル・ソートでは、ベース文字(1次レベル・ソート)を識別してから、特定のベース文字に付いている様々な発音区別記号を識別します。たとえば、文字Äと文字Aの相違は、発音区別記号の有無のみです。したがって、ÄAはベース文字(A)が同じであるため1次レベルでは同じ文字になりますが、2次レベルでは異なる文字になります。

次のリストは、1次レベル(resumeresumesの前)と2次レベル(発音区別記号なしの文字列が発音区別記号付きの文字列の前)でソートされています。

resume
résumé
Résumé
Resumes
resumes
résumés

3次レベル・ソート

3次レベル・ソートでは、ベース文字(1次レベル・ソート)、発音区別記号(2次レベル・ソート)およびケース(大文字と小文字)が識別されます。さらに、+-および*などの特殊文字も識別できます。

次に3次レベル・ソートの例を示します。

  • 文字aAは、1次レベルと2次レベルでは同じ文字ですが、3次レベルでは異なる文字です。これは、ケースが異なるためです。

  • 文字äAは、1次レベルでは同じ文字ですが、2次レベルと3次レベルでは異なる文字です。

  • ダッシュ文字-の1次レベルと2次レベルでの順序は、0(ゼロ)です。つまり、この文字は、1次と2次のレベルでは無視されます。ダッシュを1次レベルの順序が0(ゼロ)以外の別の文字、たとえば、uと比較しても、1次レベルでの結果は取得できません。これは、uと比較する対象の文字がないためです。この場合は、3次レベルでのみ-uの相違が検索されます。

次のリストは、1次レベル(resumeresumesの前)、2次レベル(発音区別記号なしの文字列が発音区別記号付きの文字列の前)および3次レベル(小文字が大文字の前)でソートされています。

resume
Resume
résumé
Résumé
resumes
Resumes
résumés
Résumés

言語ソート機能

この項では、次の言語ソート機能の違いについて説明します。

言語ソートは、必要な特性を含むようにカスタマイズできます。

ベース文字

ベース文字はベース文字表に定義されています。この表によって、各文字がベース文字にマップされます。たとえば、aAäおよびÄはすべて、ベース文字であるaにマップされます。この概念は、Oracle Textで作業する場合に特に重要です。


関連項目:

『Oracle Textリファレンス』

無視可能文字

多言語ソートでは、特定の文字を無視可能文字として処理できます。ソート操作または照合操作で無視可能文字を含む2つの値(文字列)を比較する際、無視可能文字はスキップされ、存在しないものとして処理されます。多言語ソートでは、1次無視可能文字と2次無視可能文字の2種類の無視可能文字を定義できます。1次無視可能文字は、任意の比較に適用される多言語ソート定義にアクセントを区別しない修飾子_AIがある場合(GENERIC_M_AIなど)に無視されます。2次無視可能文字は、適用される定義にアクセントを区別しない修飾子_AIまたは大/小文字を区別しない修飾子_CIがある場合に無視されます。

Oracle Locale Builderユーティリティの多言語ソート定義では、1次無視可能文字は分音文字と呼ばれます。1次無視可能文字は各種アルファベット(ラテン、キリル、ギリシャ、デーバナーガリー、カタカナなど)の発音区別記号(アクセント)から成りますが、Enclosing CircleやEnclosing Squareなどの装飾修飾子も含まれます。これらの文字は分音結合文字で、前の文字と結合して1つのアクセント付き文字または装飾付き文字になります。(分音とは、画面上または紙面上で、その文字が前の文字と同じ位置にあることを示します。)たとえば、英小文字eの後ろにCombining Grave Accentを付けると1文字のèになり、英大文字Aの後ろにCombining Enclosing Circleを付けると1文字の(A)になります。分音文字がアクセントを区別しないソートで無視可能と定義されているおかげで、このソートでは、たとえばrôlerolenaïvenaive、および(A)(B)(C)とABCを同値として処理できます。

Oracle Locale Builderユーティリティの多言語ソート定義では、2次無視可能文字は句読点と呼ばれます。2次無視可能文字は、スペース、改行制御コード、ダッシュ、各種の引用符、数値演算子、ドット、カンマ、感嘆符、各種のカッコなどで構成されます。アクセントを区別しない(_AI)ソートおよび大/小文字を区別しない(_CI)ソートでは、これらの句読点は無視されるため、multi-lingualmultilinguale-mailemailを同値として処理できます。

標準の大/小文字およびアクセントを区別するソートが使用されている場合、無視可能文字は無視されません。ただし、文字列の順序を決定する際、無視可能文字は優先順位が低くなります。たとえば、GENERIC_Mソートではmulti-lingualmultilingualの後にソートされますが、依然としてmultidimensionalmultinational間にソートされます。順序を決定する際、ベース文字の比較d < l < nの方が、2次無視可能文字であるハイフンの有無よりも高い優先順位が付けられます。

多言語ソート定義における分音文字、句読点の完全なリストは、Oracle Locale Builderで定義を表示すると示されます。

一般に、単一言語ソート定義には句読点も分音文字も含まれません。一部の単一言語ソート定義には、空白文字とタブ文字が含まれることがあります。比較アルゴリズムでは、マイナー値が各未定義文字に自動的に割り当てられます。これにより、句読点は無視できなくなりますが、多言語ソートの場合と同様に、比較する文字列の順序を決定する際の優先順位は低くなります。単一言語ソートでの句読点間の順序はUnicodeコード・ポイントに基づいているため、ユーザーの予想とは一致しないことがあります。

短縮文字

ソート要素は、通常、単一文字で構成されていますが、一部のロケールでは、1つの文字列に2つ以上の文字がある場合があります。その場合、その文字列はソート時にも単一のソート要素とみなす必要があります。たとえば、伝統的なスペイン語の文字列chは、2つの文字で構成されています。これらの文字は、多言語ソートでは短縮文字と呼ばれ、単一言語ソートでは、特殊組合せ文字と呼ばれます。

合成文字を短縮文字と混同しないでください。áなどの合成文字は、それぞれ独自のエンコーディングを持つa'に分解できます。合成文字と短縮文字の違いは、合成文字が端末に1文字として表示できるのに対して、短縮文字はソートにのみ使用され、それを構成する文字はそれぞれ個別に表示される必要があることです。

拡張文字

一部のロケールでは、特定の文字を文字列であるかのようにソートする必要があります。ドイツ語の文字ß(強調のs)がその例です。この文字は、文字列SSと同じようにソートされます。別の例では、öは、odの後、ofの前にoeのようにソートされます。これらの文字は、多言語ソートでは拡張文字と呼ばれ、単一言語ソートでは、特殊文字と呼ばれます。短縮文字の場合と同様、拡張文字に対する置換文字列は、ソート目的の場合のみ意味があります。

状況依存文字

日本語では、全角のダッシュに似た長母音記号は、先行する文字の母音を長く伸ばすことを示す長音記号を表しています。ソート順序は、長音記号の前にある母音に応じて異なります。この方法は、状況依存ソートと呼ばれます。たとえば、文字kaの後にくる長音記号は、aを長く伸ばすことを示し、aと同じように処理されます。一方、文字kiの後にくる長音記号は、iを長く伸ばすことを示し、iと同じように処理されます。これをラテン文字に変換すると、ソートは次のようになります。

kaa   
ka—   -- kaa and ka— are the same
kai   -- kai follows ka- because i is after a
kia   -- kia follows kai because i is after a
kii   -- kii follows kia because i is after a
ki—   -- kii and ki— are the same

標準的な同値化

標準的な同値化は多言語ソートの属性であり、同値のコード・ポイント順序のソート方法を記述したものです。標準的な同値化が特定の言語ソートに適用される場合、標準的に同値の文字列は同等とみなされます。

1つのUnicodeのコード・ポイントが、一連のベース文字のコード・ポイントに発音区別記号のコード・ポイントを加えたものと同じ値である場合があります。これは、Unicodeの標準的な同値化と呼ばれます。たとえば、äはウムラウト付きのベース文字aと同じです。言語フラグCANONICAL_EQUIVALENCE = TRUEは、特定の言語ソートにUnicodeに定義されている標準的な同値化規則をすべて適用する必要があることを示します。Oracleデータベース定義の言語ソートには、標準的な同値化フラグ用の適切な設定が含まれています。すべてのデータが合成された形式の場合は、このフラグをFALSEに設定すると、比較と順序付け機能が高速になります。

たとえば、次の文字列を考えてみます。

  • äa(aウムラウトの後にa)

  • a¨b(aの後にウムラウトとb)

  • äc(aウムラウトの後にc)

CANONICAL_EQUIVALENCE=FALSEの場合、文字列のソート順序は次のようになります。

a¨b
äa
äc

これは、標準的な同値化が適用されない場合は、aäの前にくるためです。

CANONICAL_EQUIVALENCE=TRUEの場合、文字列のソート順序は次のようになります。

äa
a¨b
äc

これは、äが標準的に同値として処理されるためです。

Oracle Locale Builderを使用すると、既存の多言語ソートで標準的な同値化フラグの設定を表示できます。Oracle Locale Builderを使用してカスタマイズした多言語ソートを作成する場合は、標準的な同値化フラグを必要に応じて設定できます。


関連項目:

標準的な同値化フラグの設定の詳細は、「Oracle Locale Builderを使用した新規言語ソートの作成」を参照してください。

逆2次ソート

フランス語では、発音区別記号付き文字を含む文字列をソートする場合、最初にベース文字が左から右の順に比較されますが、発音区別記号付き文字自体は右から左の順に比較されます。たとえば、デフォルトでは、発音区別記号付き文字は、発音区別記号が付かない文字の後に置かれます。そのため、フランス語ソートでは、ÈditEdítの前にきます。この2つの文字列は1次レベルでは同値です。2次レベルの順序は、発音区別記号付き文字を右から左へ調べてから決定されます。個別のロケールでは、発音区別記号付き文字を右から左のルールでソートするように要求できます。逆2次ソートを使用可能にするには、REVERSE_SECONDARY言語フラグをTRUEに設定します。


関連項目:

逆2次フラグの設定の詳細は、「Oracle Locale Builderを使用した新規言語ソートの作成」を参照してください。

タイ語/ラオ語文字に対する文字の再配列

タイ語とラオ語の場合は、ソート前に一部の文字を後続の文字と最初に入れ替える必要があります。通常、この種の文字は、母音を表す記号であるため、次にくる文字は子音になります。子音と母音は、ソート前に入れ替える必要があります。ソート前に入れ替える必要があるすべての文字について、SWAP_WITH_NEXT語フラグを設定してください。


関連項目:

SWAP_WITH_NEXTの詳細は、「Oracle Locale Builderを使用した新規言語ソートの作成」を参照してください。

特殊文字

特殊文字とは、単一言語ソートで使用する用語です。この文字は、多言語ソートでは、拡張文字と呼ばれます。


関連項目:

「拡張文字」

特殊組合せ文字

特殊組合せ文字とは、単一言語ソートで使用する用語です。この文字は、多言語ソートでは、短縮文字と呼ばれます。


関連項目:

「短縮文字」

特殊な大文字

1つの小文字が複数の大文字にマップされる場合があります。たとえば、伝統的なドイツ語では、ßの大文字は、SSです。

このような大/小文字の変換は、NLS_UPPERNLS_LOWERおよびNLS_INITCAPのSQL関数によって、言語ソート基準で設定された規則に従って処理されます。SQL関数UPPERLOWERおよびINITCAPでは、これらの特殊文字を処理できません。これは、大/小文字区別の操作が、言語に依存しない基礎となるキャラクタ・セットに定義されたバイナリ・マッピングに基づいているためです。

NLS_UPPER SQL関数は、小文字の文字列と同じキャラクタ・セットからの大文字をすべて戻します。次の例に、NLS_SORTXGERMANに設定されている場合のNLS_UPPER関数の結果を示します。

SELECT NLS_UPPER ('große') "Uppercase" FROM DUAL;

Upper
-----
GROSSE

関連項目:

『Oracle Database SQL言語リファレンス』

特殊な小文字

Oracleデータベースは、特殊な小文字をサポートしています。1つの大文字が複数の小文字にマップされる場合があります。たとえば、トルコ語の大文字Iは、小文字のiのドットなしになります。

大/小文字区別およびアクセント区別なしの言語ソート

Oracleデータベース内の操作では、常に大/小文字およびアクセント(発音区別記号)が区別されます。大/小文字およびアクセントを区別しない比較とソートの実行が必要になる場合があります。

以前のバージョンのデータベースでは、NLS_UPPERおよびNLS_LOWERSQL関数を使用して大/小文字区別なしの問合せを実行できました。この2つの関数は、特定の言語ソート定義に基づいて文字列の大/小文字を変更します。これにより、使用言語に関係なく大/小文字を区別しない検索を実行できます。たとえば、次のようにtest1表を作成します。

SQL> CREATE TABLE test1(word VARCHAR2(12));
SQL> INSERT INTO test1 VALUES('GROSSE');
SQL> INSERT INTO test1 VALUES('Große');
SQL> INSERT INTO test1 VALUES('große');
SQL> SELECT * FROM test1;

WORD
------------
GROSSE
Große
große

GROSSEに対して、次のように大/小文字を区別した検索を実行します。

SQL> SELECT word FROM test1 WHERE word='GROSSE';

WORD
------------
GROSSE

NLS_UPPER関数を使用し、GROSSEに対して大/小文字を区別しない検索を実行します。

SELECT word FROM test1
WHERE NLS_UPPER(word, 'NLS_SORT = XGERMAN') = 'GROSSE';

WORD
------------
GROSSE
Große
große

Oracle Database 10g以降、Oracleデータベースには、言語ソートに大/小文字を区別しないオプションとアクセントを区別しないオプションが用意されています。次のタイプの単一言語ソートおよび多言語ソートがあります。

アクセントおよび大/小文字を区別しない多言語ソートでは、「無視可能文字」に記載されているように、句読点は無視されます。

これ以降の内容は、次のとおりです。

大/小文字およびアクセントを区別しないソートの例

後述の例は、次のソートを示しています。

  • ベース文字、発音区別記号、句読点およびケースに関する情報を使用するソート

  • 大/小文字を区別しないソート

  • アクセントを区別しないソート

例5-1 ベース文字、発音区別記号、句読点およびケース情報を使用した言語ソート

次のリストは、ベース文字、発音区別記号、句読点およびケース情報を使用してソートされています。

blackbird
black bird
black-bird
Blackbird
Black-bird
blackbîrd
bläckbird

例5-2 大/小文字を区別しない言語ソート

次のリストは、ベース文字、発音区別記号および句読点情報を使用し、ケースを無視してソートされています。

black bird
black-bird
Black-bird
blackbird
Blackbird
blackbîrd
bläckbird

black-birdBlack-birdの違いはケースのみのため、ソートでは同じ値となります。この2つの値は、リストでどちらが前にきてもかまいません。Blackbirdblackbirdの値もソートでは同じ値となり、リストでどちらが前にきてもかまいません。

例5-3 アクセントを区別しない言語ソート

次のリストは、ベース文字情報のみを使用してソートされています。発音区別記号、句読点およびケース情報は使用されていません。

blackbird
bläckbird
blackbîrd
Blackbird
BlackBird
Black-bird
Black bird

大/小文字またはアクセントを区別しないソートの指定

NLS_SORTセッション・パラメータを使用して、大/小文字またはアクセントを区別しないソートを指定します。

  • 大/小文字を区別しないソートの場合は、Oracleソート名に_CIを追加します。

  • アクセントも大/小文字も区別しないソートの場合は、Oracleソート名に_AIを追加します。

たとえば、NLS_SORTを次のタイプの値に設定できます。

FRENCH_M_AI
XGERMAN_CI

バイナリ・ソートでも、大/小文字またはアクセントを区別しないように指定できます。NLS_SORTの値としてBINARY_CIを指定すると、アクセントを区別するが大/小文字は区別しないソートを指定したことになります。BINARY_AIは、アクセントも大/小文字も区別しないバイナリ・ソートを指定します。キャラクタ・セットのバイナリ・ソート順序が使用中のキャラクタ・セットに適している場合は、バイナリ・ソートを使用します。

たとえば、NLS_LANG環境変数をAMERICAN_AMERICA.WE8ISO8859P1に設定し、次のようにtest2という表を作成して移入します。

SQL> CREATE TABLE test2 (letter VARCHAR2(10));
SQL> INSERT INTO test2 VALUES('ä');
SQL> INSERT INTO test2 VALUES('a');
SQL> INSERT INTO test2 VALUES('A');
SQL> INSERT INTO test2 VALUES('Z');
SQL> SELECT * FROM test2;

LETTER
-----------
ä 
a
A
Z

NLS_SORTのデフォルト値はBINARYです。次の文を使用して、test2表内の文字のバイナリ・ソートを実行します。

SELECT * FROM test2 ORDER BY letter;

NLS_SORTの値を変更するには、次のような文を入力します。

ALTER SESSION SET NLS_SORT=BINARY_CI;

次の表に、NLS_SORTBINARYBINARY_CIおよびBINARY_AIに設定した結果得られるソート順を示します。

BINARY BINARY_CI BINARY_AI
A a ä
Z A a
a Z A
ä
ä
Z

NLS_SORT=BINARYの場合は、大文字が小文字の前にきます。発音区別記号付きの文字は最後に表示されます。

ソートで発音区別記号は考慮されるが大/小文字は区別されない場合(BINARY_CI)は、発音区別記号付きの文字が最後に表示されます。

大/小文字区別と発音区別記号がどちらも無視される場合(BINARY_AI)、äはベース文字aを持つ他の文字でソートされます。ベース文字aを持つ文字はすべて、zの前にきます。

キャラクタ・セットがUS7ASCIIまたはバイナリ・ソートと同じソート順序を持つキャラクタ・セットの場合は、パフォーマンスを改善するためにバイナリ・ソートを使用できます。

次の表に、表のドイツ語ソートの結果得られるソート順序を示します。

GERMAN GERMAN_CI GERMAN_AI
a a ä
A A a
ä
ä
A
Z Z Z

ドイツ語ソートでは、小文字が大文字の前にきて、äZの前にきます。このソートで大/小文字区別と発音区別記号の両方が無視される場合(GERMAN_AI)、äはベース文字aを持つ他の文字を使用して表示されます。

言語ソートの例

この項の例は、バイナリ・ソート、単一言語ソートおよび多言語ソートを示しています。例を使用する準備として、表test3を作成して移入します。次の文を入力します。

SQL> CREATE TABLE test3 (name VARCHAR2(20));
SQL> INSERT INTO test3 VALUES('Diet');
SQL> INSERT INTO test3 VALUES('À voir');
SQL> INSERT INTO test3 VALUES('Freizeit');

例5-4 バイナリ・ソート

ORDER BY句でバイナリ・ソートを使用します。

SQL> SELECT * FROM test3 ORDER BY name;

次の出力が表示されます。

Diet
Freizeit
À voir

バイナリ・ソートの結果、À voirがリストの最後に表示されることに注意してください。

例5-5 ドイツ語の単一言語ソート

NLS_SORTパラメータをgermanに設定してNLSSORT関数を使用し、ドイツ語ソートを取得します。

SQL> SELECT * FROM test3 ORDER BY NLSSORT(name, 'NLS_SORT=german');

次の出力が表示されます。

À voir
Diet
Freizeit

ドイツ語ソートでは、À voirがリストの先頭になることに注意してください。

例5-6 ドイツ語の単一言語ソートと多言語ソートの比較

図5-1に示した文字列をtestに挿入します。この場合、横棒付きのDの後にñがきます。

図5-1 文字列

図5-1の説明は次にあります。
画像の説明

NLS_SORTパラメータをgermanに設定してNLSSORT関数を使用し、ドイツ語の単一言語ソートを実行します。

SQL> SELECT * FROM test2 ORDER BY NLSSORT(name, 'NLS_SORT=german');

ドイツ語ソートからの出力では、新しい文字列がエントリ・リストの最後に表示されます。これは、その文字がドイツ語ソートでは認識されないためです。

次の文を入力して多言語ソートを実行します。

SQL> SELECT * FROM test2 ORDER BY NLSSORT(name, 'NLS_SORT=generic_m');

出力では、ISOソート・ルールに従って新しい文字列がDietの後に表示されます。


関連項目:


言語比較の実行

SQL比較操作を実行すると、文字はそのバイナリ値に基づいて比較されます。バイナリ値が大きい文字は、他の文字より後になります。ほとんどの言語で、バイナリの順序と言語上の順序が一致していないため、一般ユーザーにとってこのような比較は無意味です。意味のある比較をするためには、セッション・パラメータのNLS_COMPおよびNLS_SORTを使用して、動作を指定できます。この2つのパラメータの設定方法によって、文字のソートと比較に使用するルールが決定されます。

NLS_COMPの設定によって、SQL操作でNLS_SORTを処理する方法が決定されます。NLS_COMPの有効値は次の3つです。

表5-2に、これらの異なる設定を使用した場合のSQL操作の動作の違いを示します。

表5-2 NLS_COMP設定を使用した言語比較の動作


BINARY LINGUISTIC ANSI

SQL 演算子




UNIONINTERSECTMINUS

バイナリ

NLS_SORTに従います。

バイナリ

SQL 関数




DECODE

バイナリ

NLS_SORTに従います。

バイナリ

INSTRx

バイナリ

NLS_SORTに従います。

バイナリ

LEASTGREATEST

バイナリ

NLS_SORTに従います。

バイナリ

MAXMIN

バイナリ

NLS_SORTに従います。

バイナリ

NLS_INITCAP

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

NLS_LOWER

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

NLS_UPPER

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

NLSSORT

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

NULLIF

バイナリ

NLS_SORTに従います。

バイナリ

REGEXP_COUNT

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

REGEXP_INSTR

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

REGEXP_LIKE

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

REGEXP_REPLACE

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

REGEXP_SUBSTR

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

REPLACE

バイナリ

NLS_SORTに従います。

バイナリ

RTRIMTRIMLTRIM

バイナリ

NLS_SORTに従います。

バイナリ

TRANSLATETRANSLATE USING

バイナリ

NLS_SORTに従います。

バイナリ

SQL




=, !=, >, <, >=, <=

バイナリ

NLS_SORTに従います。

NLS_SORTに従います。

BETWEENNOT BETWEEN

バイナリ

NLS_SORTに従います。

NLS_SORTに従います。

CASE

バイナリ

NLS_SORTに従います。

バイナリ

DISTINCT

バイナリ

NLS_SORTに従います。

バイナリ

GROUP

バイナリ

NLS_SORTに従います。

バイナリ

GROUP BY

バイナリ

NLS_SORTに従います。

バイナリ

HAVING

バイナリ

NLS_SORTに従います。

NLS_SORTに従います。

INNOT IN

バイナリ

NLS_SORTに従います。

NLS_SORTに従います。

LIKE

バイナリ

NLS_SORTに従います。

バイナリ

ORDER BY

NLS_SORTに従います。

NLS_SORTに従います。

NLS_SORTに従います。

START WITH

バイナリ

NLS_SORTに従います。

NLS_SORTに従います。

UNIQUE

バイナリ

NLS_SORTに従います。

バイナリ


各パラメータの詳細は、「NLS_COMP」および「NLS_SORT」を参照してください。

照合キー

比較条件が=、!=、>、<、>=、<=、BETWEENNOT BETWEENINNOT INの場合、問合せ句ORDER BYまたはGROUP BY、または集計関数COUNT(DISTINCT)は、NLS_SORTで指定された言語ルールに従って評価され、比較引数値が照合キーと呼ばれるバイナリ値に最初に変換され、RAW値のようにバイト単位で比較されます。単一言語ソートが適用されると、照合キーには、ソース値の文字のメジャー値とこれらの文字のマイナー値が連結して格納されます。多言語ソートが適用されると、照合キーには、1次、2次および3次値が連結されて格納されます。

照合キーは、NLSSORT関数で戻される値と同じ値になります。つまり、これらのSQL操作の言語動作を有効にすることは、それらの引数をNLSSORT関数のコールに含めるのと同じです。

言語比較の精度の制限

照合キーはデータ型がRAWの値で、RAW値の最大長は200バイトのため、照合キーの最大長は2000バイトに制限されます。全ソースの文字の値で2000バイトを超える照合キーが生成されると、この値で生成された照合キーで値の最大接頭辞(先頭の部分文字列)が計算され、計算結果が2000バイトを超えることはなくなります。単一言語ソートでは、接頭辞の長さは一般的に1000文字になります。複数言語ソートでは、接頭辞は一般的に500文字になります。正確な長さは、特定の照合およびソース値に含まれる特定の文字によって増減する場合があります。

照合キーの生成でこの方法を使用すると、照合キーを使用して言語動作を実行するSQL操作で、長い引数の終了部分が無視される場合があります。たとえば、先頭の1000文字が同じで、それ以降の任意の位置の値が異なる2つの文字の値は、GROUP BY句で一緒にグループ化されます。

言語比較の例

次に、異なるNLS_COMP設定を使用した動作の例を示します。

例5-7 バイナリ比較のバイナリ・ソート

次に、バイナリ設定を使用した動作を示します。

SQL> ALTER SESSION SET NLS_COMP=BINARY;
SQL> ALTER SESSION SET NLS_SORT=BINARY;
SQL> SELECT ename FROM emp1;

ENAME
----------------------
Mc Calla
MCAfee
McCoye
Mccathye
McCafeé

5 rows selected

SQL> SELECT ename FROM emp1 WHERE ename LIKE 'McC%e';

ENAME
----------------------
McCoye

1 row selected

例5-8 言語比較の大/小文字区別なしのバイナリ・ソート

次に、大/小文字を区別しない設定を使用した動作を示します。

SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;
SQL> SELECT ename FROM emp1 WHERE ename LIKE 'McC%e';

ENAME
----------------------
McCoye
Mccathye

2 rows selected

例5-9 言語比較のアクセント区別なしのバイナリ・ソート

次に、アクセントを区別しない設定を使用した動作を示します。

SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=BINARY_AI;
SQL> SELECT ename FROM emp1 WHERE ename LIKE 'McC%e';

ENAME
----------------------
McCoye
Mccathye
McCafeé

3 rows selected

例5-10 戻す行が少なくなる言語比較

一部の操作では、言語ルールを適用すると、戻される行が少なくなる場合があります。たとえば、バイナリ設定の場合、次のようにMcAfeeMcafeeは異なります。

SQL> ALTER SESSION SET NLS_COMP=BINARY;
SQL> ALTER SESSION SET NLS_SORT=BINARY;
SQL> SELECT DISTINCT ename FROM emp2;

ENAME
----------------------
McAfee
Mcafee
McCoy

3 rows selected

ただし、大/小文字の区別なし設定の場合、McAfeeMcafeeは同じです。

SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;
SQL> SELECT DISTINCT ename FROM emp2;

ENAME
----------------------
McAfee
McCoy

2 rows selected

この例では、McAfeeまたはMcafeeのいずれかがDISTINCT操作で戻される可能性があります。どちらが選択されるかを正確に保証することはできません。

例5-11 XSPANISHを使用した言語比較

バイナリ比較を使用した場合は文字が同じで、言語比較を使用した場合は文字が異なるケースがあります。たとえば、バイナリ設定では、CindyChadおよびClaraの文字Cは、次のように、同じ文字Cを表します。

SQL> ALTER SESSION SET NLS_COMP=BINARY;
SQL> ALTER SESSION SET NLS_SORT=BINARY;
SQL> SELECT ename FROM emp3 WHERE ename LIKE 'C%';

ENAME
----------------------
Cindy
Chad
Clara

3 rows selected

言語ルールが伝統的なスペイン語のXSPANISHに設定されているデータベース・セッションでは、chは、1文字として処理されます。この場合、Chadの文字cは、CindyClaraの文字Cとは異なります。

SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;
SQL> ALTER SESSION SET NLS_SORT=XSPANISH;
SQL> SELECT ename FROM emp3 WHERE ename LIKE 'C%';

ENAME
----------------------
Cindy
Clara

2 rows selected

またchという組合せの場合の文字cは、単独の文字cとは異なります。

SQL> SELECT REPLACE ('character', 'c', 't') "Changes" FROM DUAL;

Changes
---------------------
charatter

言語索引の使用

言語ソートは言語固有であるため、バイナリ・ソートよりもデータ処理が増えます。ASCII文字のバイナリ・コードには文字の順序が反映されているため、言語ASCIIのバイナリ・ソートを使用すると正確で高速です。複数言語のデータがデータベースに格納されている場合、アプリケーションでは、言語に応じて異なるソート基準に従い、SELECT...ORDER BY文から戻されたデータをソートできます。このようなソートは、言語索引を使用すると、パフォーマンスを低下させずに実現できます。列の言語索引によって、挿入と更新の操作速度が低下しますが、ORDER BY句およびWHEREを使用した言語ソートのパフォーマンスは大幅に向上します。

英語以外の言語を使用する関数索引を作成できます。この索引は、NLS_SORTで決められている言語ソート順序を変更しません。言語索引は単にパフォーマンスを向上させるためのものです。

次の文では、ドイツ語のソートに基づく索引が作成されます。

CREATE TABLE my_table(name VARCHAR(20) NOT NULL);
CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = German'));

/*The NOT NULL in the CREATE TABLE statement ensures that the index is used*/

索引の作成後に、次の例ようなSELECT文を入力します。

SELECT * FROM my_table ORDER BY name
WHERE name LIKE 'Hein%';

この文は、言語索引を使用しない場合の同じSELECT文より速く結果が戻されます。

これ以降の内容は、次のとおりです。

言語索引でサポートされるSQL操作および機能

言語索引サポートは、次の照合依存のSQL操作およびSQL機能で使用できます。

  • 比較条件: =!=><>=<=

  • 範囲条件: BETWEEN | NOT BETWEEN

  • IN | NOT IN

  • ORDER BY

  • GROUP BY

  • LIKE(LIKELIKE2LIKE4LIKEC)

  • DISTINCT

  • UNIQUE

  • UNION

  • INTERSECT

  • MINUS

次のリストのSQL関数では、言語索引を使用できません。

  • INSTR(INSTRINSTRBINSTR2INSTR4INSTRC)

  • MAX

  • MIN

  • REPLACE

  • TRIM

  • LTRIM

  • RTRIM

  • TRANSLATE

複数言語の言語索引

複数言語のデータに言語索引を作成する方法には、次の3通りがあります。

  • アプリケーションでサポートされている各言語の言語索引を作成します。このアプローチは単純ですが、大量のディスク領域が必要になります。索引ごとに、その索引が作成されている言語以外の言語の複数行が、順番の最後にまとめて照合されます。次の例では、フランス語とドイツ語の言語索引を作成しています。

    CREATE INDEX french_index ON employees (NLSSORT(employee_id, 'NLS_SORT=FRENCH'));
    CREATE INDEX german_index ON employees (NLSSORT(employee_id, 'NLS_SORT=GERMAN'));
    

    使用する索引は、ORDER BY句で指定したNLS_SORTセッション・パラメータまたはNLSSORT関数の引数によって決定されます。たとえば、NLS_SORTセッション・パラメータがFRENCHに設定されている場合、Oracle Databaseではfrench_indexが使用されます。GERMANに設定されている場合は、german_indexが使用されます。

  • すべての言語に対して単一言語索引を作成します。そのためには、NLSSORT関数のパラメータとして言語列(「例: フランス語の言語索引の設定」LANG_COL)を使用する必要があります。この言語列には、索引の作成対象となる列のデータのNLS_LANGUAGE値が含まれます。次の例では、複数言語に対する単一言語索引を作成しています。の索引では、NLS_LANGUAGEに対して同じ値を持つ行がまとめてソートされます。

    CREATE INDEX i ON t (NLSSORT(col, 'NLS_SORT=' || LANG_COL));
    

    問合せでは、ORDER BY句で指定したNLSSORT関数の引数に基づいて索引が選択されます。

  • GENERIC_MFRENCH_Mなどの多言語ソートのいずれかを使用して、すべての言語に単一言語索引を作成します。この索引は、ISO 14651に定義されている規則に従って文字をソートします。次に例を示します。

    CREATE INDEX i on t (NLSSORT(col, 'NLS_SORT=GENERIC_M');
    

    関連項目:

    Unicodeソートの詳細は、「多言語ソート」を参照してください。

言語索引の使用要件

言語索引を使用するための要件は、次のとおりです。

この項では、次の例についても説明します。

NLS_SORTを適切に設定

NLS_SORTパラメータで、言語ソートに使用する言語定義を指定する必要があります。たとえば、フランス語の言語ソート順序を使用する場合は、NLS_SORTFRENCHに設定する必要があります。たとえば、フランス語の言語ソート順序を使用する場合は、NLS_SORTGERMANに設定する必要があります。

NLS_SORTを設定するには、複数の方法があります。すべての言語に同じSQL文を使用できるように、NLS_SORTをクライアントの環境変数として設定する必要があります。クライアント環境でNLS_SORTを設定すると、様々な言語索引を使用できます。


関連項目:

「NLS_SORT」

列がNOT NULLとして宣言されていない場合にWHERE句でNOT NULLを指定する方法

言語索引を持つ列でORDER BY column_name句を使用する必要がある場合は、次の例のようにWHERE句を含めます。

WHERE NLSSORT(column_name) IS NOT NULL

列がスキーマ内でNOT NULL列として定義されていれば、このWHERE句は必要ありません。

例: フランス語の言語索引の設定

次の例では、フランス語の言語索引の設定方法を示します。ALTER SESSION文を使用するかわりに、NLS_SORTをクライアントの環境変数として設定することもできます。

ALTER SESSION SET NLS_SORT='FRENCH';
CREATE INDEX test_idx ON test4(NLSSORT(name, 'NLS_SORT=FRENCH'));
SELECT * FROM test4 ORDER BY col;
ALTER SESSION SET NLS_COMP=LINGUISTIC;
SELECT * FROM test4 WHERE name > 'Henri';

注意:

NLS_COMPLINGUISTICに設定されている場合、SQL関数MAX()およびMIN()では、言語索引を使用できません。

言語の文字列検索

検索とソートは関連するタスクです。業務を適切に行うには、言語的に意味のある順序でデータを編成して処理する必要があります。言語的に意味のある方法によるデータの検索と照合は、適用されるソート順序に依存します。たとえば、cより後でfより前の文字列すべてを検索すると、NLS_SORTの値に応じて異なる結果が生成されます。ASCIIバイナリ・ソートでは、dまたはeで始まる文字列が検出されますが、大文字のDまたはEまたはêのような発音区別記号付きeなどで始まる項目は除外されます。アクセントを区別しないバイナリ・ソートを適用すると、dDおよびÊêなどのアクセント付きeで始まる文字列がすべて戻されます。NLS_SORTXSPANISHに設定して同じ検索を適用した場合は、chで始まる文字列も戻されます。これは、従来のスペイン語ではchcdの間をソートする複合文字として扱われるためです。この章では、Oracleデータベースのソートの種類と、各ソートがSQLおよびSQL正規表現による文字列検索に与える影響について説明します。

多言語環境でのSQL正規表現

正規表現は、テキスト本体に含まれる文字列のパターンを識別する強力な方法を提供します。正規表現の用途には、San Franciscoのような文字列の単純検索や、すべてのURLを抽出する複雑なタスク、さらに2文字目に母音を含むすべての単語の検索などのタスクがあります。SQLとPL/SQLは、Oracleデータベースの正規表現をサポートしています。

従来の正規表現エンジンは、英語のテキストのみを処理するように設計されていました。ただし、正規表現の実装には、西欧のテキストとはまったく異なる特性を持った多様な言語を含めることができます。Oracleデータベースの正規表現の実装は、Unicode正規表現ガイドラインに基づいています。REGEXP SQL関数は、データベース・キャラクタ・セットおよび各国語キャラクタ・セットとしてサポートされるキャラクタ・セットをすべて処理します。さらに、Oracleデータベースでは、多言語データの照合に関する固有の言語要件を処理するために、POSIXの正規表現構成メンバーの照合機能が拡張されます。

次の項では、言語依存演算子のOracle拡張について説明します。

正規表現での文字範囲'[x-y]'

POSIX規格では、正規表現での範囲には、現行ロケールの言語定義による範囲の始点から終点までの照合要素がすべて含まれます。したがって、正規表現の範囲はバイト値の範囲ではなく言語上の範囲を意味します。これは、バイト値の範囲はプラットフォームに依存し、エンド・ユーザーが文字のバイト値の順序を知っているとは思われないためです。範囲式のセマンティクスは、キャラクタ・セットから独立させる必要があります。これは、[a-d]などの範囲には、aからdのすべての文字、これらの文字に発音区別記号が付いたもの、伝統的なスペイン語におけるchのように1文字としてソートされる特殊ケースの照合要素が含まれることを意味します。

Oracle Databaseでは、NLS_SORTパラメータで指定された範囲式が解析され、指定の範囲に含まれる照合要素が判別されます。次に例を示します。

Expression:     [a-d]e
NLS_SORT:       BINARY
Does not match: cheremoya
NLS_SORT:       XSPANISH
Matches:        >>che<<remoya

正規表現での照合要素デリミタ'[. .]'

この構成メンバーは、照合要素を区切るためにPOSIX規格により導入されています。照合要素とは照合単位であり、ほとんどの場合は1文字に相当します。ただし、言語によっては、照合順序により2文字以上が1つの照合要素として定義される場合があります。従来の正規表現構文では、ユーザーは複数文字による照合要素が関係する範囲を定義できません。たとえば、chは2つの異なる文字として解析されるため、aからchは範囲として定義できません。

照合要素デリミタ[. .]を使用すると、複数文字による照合要素と他の要素を区切ることができます。たとえば、範囲aからchは、[a-[.ch.]]として記述できます。また、1文字の照合要素を区切る場合にも使用できます。定義済の照合要素でない複数言語による順序を[. .]で囲むと、正規表現ではセマンティック・エラーとみなされます。たとえば、abが定義済の複数文字による照合要素でない場合、[.ab.]は無効とみなされます。

正規表現での文字クラス'[: :]'

英語の正規表現では、範囲式を使用して文字クラスを示すことができます。たとえば、[a-z]を使用すると任意の小文字を指定できます。ただし、英語以外の正規表現では、その言語の照合順序でaが最初の小文字でzが最後の小文字でなければ、このアプローチを使用すると不正確になります。

POSIX規格では、明示的な文字クラスを移植性のある方法で指定できるように、新しい構文要素が導入されています。[: :]構文は、特定の文字クラスに属しているキャラクタ・セットを示します。文字クラス定義は、キャラクタ・セットの分類データに基づきます。

正規表現での同値化クラス'[= =]'

Oracle Databaseは、POSIX規格で推奨される[= =]構文を介して同値化クラスもサポートしています。同値化クラスは、ベース文字とそのすべてのアクセント付きバージョンで構成されます。たとえば、同値化クラス[=a=]は、âおよびäと一致します。パフォーマンス上の理由で、現行の実装ではUnicodeの複合形式と分解形式の照合はサポートされません。たとえば、ä(aウムラウト)は、ウムラウトが続くaとは一致しません。

例: 正規表現

次の例に、正規表現の一致を示します。

例5-12 NLS_SORT値を使用した大/小文字を区別しない一致

Oracleデータベースの正規表現の一致では、大/小文字区別の有無は、NLS_SORT初期化パラメータとランタイム照合オプションの2つのレベルで決定されます。REGEXP関数は、デフォルトでNLS_SORTの値から大/小文字区別の動作を継承します。この値は、ランタイム照合オプション'c'(大小文字区別あり)または'i'(大/小文字区別なし)で明示的に上書きすることもできます。

Expression: catalog(ue)?
NLS_SORT: GENERIC_M_CI
Matches: 
>>Catalog<<
>>catalogue<<
>>CATALOG<<

Oracle DatabaseのSQL構文は、次のとおりです。

SQL> ALTER SESSION SET NLS_SORT='GENERIC_M_CI';
SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'catalog(ue)?');

例5-13 ランタイム照合オプションで上書きされた大/小文字区別の有無

Expression: catalog(ue)?
NLS_SORT: GENERIC_M_CI
Match option: 'c'
Matches:
>>catalogue<<
Does not match: 
Catalog
CATALOG

Oracle DatabaseのSQL構文は、次のとおりです。

SQL> ALTER SESSION SET NLS_SORT='GENERIC_M_CI';
SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'catalog(ue)?','c');

例5-14 照合要素演算子[..]を使用した照合

Expression: [^-a-[.ch.]]+  /*with NLS_SORT set to xspanish*/
Matches: 
>>driver<<
Does not match:
cab

Oracle DatabaseのSQL構文は、次のとおりです。

SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'[^-a-[.ch.]]+');

例5-15 文字クラス演算子[::]を使用した照合

この式では、小文字6文字からなる文字列が検索されます。アクセント付き文字は、小文字として一致することに注意してください。

Expression: [[:lower:]]{6}
Database character set: WE8ISO8859P1
Matches:
>>maître<<
>>mòbile<<
>>pájaro<<
>>zurück<<

Oracle DatabaseのSQL構文は、次のとおりです。

SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'[[:lower:]]{6}');

例5-16 ベース文字演算子[==]を使用した照合

Expression: r[[=e=]]sum[[=e=]]
Matches:
>>resume<<
>>résumé<<
>>résume<<
>>resumé<<

Oracle DatabaseのSQL構文は、次のとおりです。

SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'r[[=e=]]sum[[=e=]]');

関連項目:

  • 正規表現の構文の詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

  • REGEX SQL関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。