Zeichenfolgevergleiche
Es gibt zwei verschiedene Typen von Zeichenfolgevergleichen.
Binärzeichenfolgevergleiche
Binäre Zeichenfolgevergleiche verwenden immer eine Sortierfolge von *HEX und die entsprechenden Byte jeder Zeichenfolge werden verglichen. Außerdem sind zwei Binärzeichenfolgen nur gleich, wenn die Längen der beiden Zeichenfolgen identisch sind. Wenn die Zeichenfolgen bis zur Länge der kürzeren Zeichenfolgelänge gleich sind, wird die kürzere Zeichenfolge als kleiner als die längere Zeichenfolge betrachtet, auch wenn die verbleibenden Byte in der längeren Zeichenfolge hexadezimale Nullen sind. Beachten Sie, dass Binärzeichenfolgen nur mit Zeichenfolgen verglichen werden können, wenn die Zeichenfolge in eine Binärzeichenfolge umgesetzt wird.
Zeichen-und Grafikzeichenfolgevergleiche
Zeichen-und Unicode-Grafikzeichenfolgevergleiche verwenden die Sortierfolge, die wirksam ist, wenn die Anweisung für alle SBCS-Daten und den Einzelbyteteil gemischter Daten ausgeführt wird. Ist die Sortierfolge *HEX, werden die entsprechenden Byte jeder Zeichenfolge verglichen. Für alle anderen Sortierfolgen werden die entsprechenden Byte des gewichteten Werts jeder Zeichenfolge verglichen.
Wenn die Zeichenfolgen unterschiedliche Längen haben, wird eine temporäre Kopie der kürzeren Zeichenfolge vor dem Vergleich auf der rechten Seite mit Leerzeichen aufgefüllt. Die Auffüllung bewirkt, dass jede Zeichenfolge dieselbe Länge hat. Das Füllzeichen ist unabhängig von der Sortierfolge immer ein Leerzeichen. Bei Bitdaten ist das Füllzeichen ebenfalls ein Leerzeichen. Bei DBCS-Grafikdaten ist das Füllzeichen ein DBCS-Leerzeichen (x '4040'). Bei Unicode-Grafikdaten ist das Füllzeichen ein UTF-16 -Leerzeichen. 1
Zwei Zeichenfolgen sind gleich, wenn eine der folgenden Bedingungen zutrifft:
- Beide Zeichenfolgen sind leer.
- Eine Sortierfolge *HEX wird verwendet, und alle entsprechenden Byte sind gleich.
- Eine andere Sortierfolge als *HEX wird verwendet und alle entsprechenden Byte des gewichteten Werts sind gleich.
Eine leere Zeichenfolge entspricht einer leeren Zeichenfolge. Die Beziehung zwischen zwei ungleichen Zeichenfolgen wird durch einen Vergleich des ersten Paars ungleicher Byte (oder Byte des gewichteten Werts) vom linken Ende der Zeichenfolge bestimmt. Dieser Vergleich erfolgt entsprechend der Sortierfolge, die bei der Ausführung der Anweisung wirksam ist.
In einer Anwendung, die in mehreren Umgebungen ausgeführt wird, muss dieselbe Sortierfolge (die von den CCSIDs der Umgebungen abhängt) verwendet werden, um identische Ergebnisse sicherzustellen. Die folgende Tabelle zeigt die Unterschiede zwischen EBCDIC, ASCII und der Db2® LUW-Standardsortierfolge für amerikanisches Englisch anhand einer Liste, die nach den einzelnen Sortierfolgen sortiert ist.
| ASCII und Unicode | EBCDIC | Db2 LUW-Standard |
|---|---|---|
0000 |
@@@@ |
0000 |
9999 |
co-op |
9999 |
@@@@ |
coop |
@@@@ |
COOP |
piano forte |
co-op |
PIANO-FORTE |
piano-forte |
COOP |
co-op |
COOP |
coop |
coop |
PIANO-FORTE |
piano forte |
piano forte |
0000 |
PIANO-FORTE |
piano-forte |
9999 |
piano-forte |
Zwei Zeichenfolgen variabler Länge mit unterschiedlicher Länge sind gleich, wenn sie sich nur in der Anzahl der abschließenden Leerzeichen unterscheiden. Bei Operationen, die einen Wert aus einer Gruppe solcher Werte auswählen, ist der ausgewählte Wert beliebig. Die Operationen, die eine solche beliebige Auswahl umfassen können, sind DISTINCT, MAX, MIN, UNION, EXCEPT, INTERSECT und Verweise auf eine Gruppierungsspalte. Weitere Informationen zur willkürlichen Auswahl, die an Verweisen auf eine Gruppierungsspalte beteiligt ist, finden Sie unter Gruppierungsklausel .
Konvertierungsregeln für Vergleich:
Wenn zwei Zeichenfolgen verglichen werden, wird eine der Zeichenfolgen bei Bedarf zuerst in den codierten Zeichensatz der anderen Zeichenfolge konvertiert. Die Zeichenkonvertierung ist nur erforderlich, wenn alle folgenden Bedingungen zutreffen:
- Die CCSIDs der beiden Zeichenfolgen sind unterschiedlich.
- Keine CCSID ist 65535.
- Die für die Konvertierung ausgewählte Zeichenfolge ist weder null noch leer.
- Die Konvertierung zwischen den beiden CCSIDs ist erforderlich. Weitere Informationen finden Sie unter Codierte Zeichensätze und CCSIDs.
Wenn zwei Zeichenfolgen mit unterschiedlichen Schemata für Codeumsetzung verglichen werden, gilt die erforderliche Konvertierung für die Zeichenfolge wie folgt:
| Erster Operand | Zweiter Operand | |||
|---|---|---|---|---|
| SBCS-Daten | DBCS-Daten | Gemischte Daten | Unicode-Grafikdaten | |
| SBCS-Daten | siehe unten | Sekunde | Sekunde | Sekunde |
| DBCS-Daten | erste | siehe unten | Sekunde | Sekunde |
| Gemischte Daten | erste | erste | siehe unten | Sekunde |
| Unicode-Grafikdaten | erste | erste | erste | siehe unten |
Andernfalls hängt die für die Konvertierung ausgewählte Zeichenfolge vom Typ jedes Operanden ab. Die folgende Tabelle zeigt anhand der Operandentypen, welcher Operand für die Konvertierung ausgewählt wird:
| Erster Operand | Zweiter Operand | ||||
|---|---|---|---|---|---|
| Spaltenwert | Abgeleiteter Wert | Special Register | Constant | Variable | |
| Spaltenwert | Sekunde | Sekunde | Sekunde | Sekunde | Sekunde |
| Abgeleiteter Wert | erste | Sekunde | Sekunde | Sekunde | Sekunde |
| Special Register | erste | erste | Sekunde | Sekunde | Sekunde |
| Constant | erste | erste | erste | Sekunde | Sekunde |
| Variable | erste | erste | erste | erste | Sekunde |
Eine Variable, die Daten in einem fremden Schema für Codeumsetzung enthält, wird immer effektiv in das native Schema für Codeumsetzung konvertiert, bevor sie in einer Operation verwendet wird. Die obigen Regeln basieren auf der Annahme, dass diese Konvertierung bereits erfolgt ist.
Ein Fehler wird zurückgegeben, wenn ein Zeichen der Zeichenfolge nicht konvertiert werden kann oder wenn die Konvertierung zwischen dem CCSID-Paar nicht definiert ist. Weitere Informationen finden Sie unter Codierte Zeichensätze und CCSIDs. Eine Warnung tritt auf, wenn ein Zeichen der Zeichenfolge in das Substitutionszeichen konvertiert wird.