この引用は、この OCA/OCP Oracle Database 11g All-in-One Exam Guide の第 9 章の31 ページからのようです。abc
もしそれがそのように機能し、実際に同等であるとcba
見なされた場合、これは正しくないように見えます (親切です) 。
11gR2 SQL 言語リファレンスには次のように書かれています。
デフォルトのバイナリ比較では、データベース・キャラクタ・セット内の文字の数値コードの連結値に従って、文字列が比較されます。文字セット内の他の文字よりも大きな数値を持つ場合、その文字は別の文字よりも大きくなります。
主な違いは、「連結された値」というフレーズです。つまり、@JoroenMoonen が示したものに近く、文字セットの数値コードがつなぎ合わされています。本が示した値の合計ではありません。
しかし、連結される各文字の数値コードと、比較される数値を表す結果の (潜在的に非常に長い!) 文字列を考えるのは誤解を招く可能性があります。これらの値を取るabc
= 000001000001000001100100
=266340
とcba
= 011001000001000000000100
= 6557700
。6557700 と 266340 を比較するだけで、それcba
が「より大きい」ことを示しabc
ます。しかしcb
、「よりも大きい」abc
- select greatest('abc', 'cb') from dual
- 同じ変換を行うと、cb
= 0110010000010000
=が得られます25616
。これは、数値として明らかに 266340 よりも小さくなります。
実際には、同等の 10gR1 ドキュメントでよりよく説明されていると思います。
Oracle は、異なる最初の文字まで 1 文字ずつ 2 つの値を比較します。その位置にある文字が大きいほど値が大きいと見なされます。長さが異なる 2 つの値が短い方の値の最後まで同じである場合、長い方の値が大きいと見なされます。長さが等しい 2 つの値に異なる文字がない場合、値は等しいと見なされます。
したがって、ASCII を想定すると、c
(99) は (97) より大きいa
ため、どちらの文字列でもそれ以上の文字を調べる必要はありません。これは決して見ることはできませabc
んcba
。
とにかく、あなたが本の説明に戸惑うのは当然です。