A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  Sonderzeichen  sybase-tech-blog


Kategorie: ASE: Funktionen: String Funktionen

compare()

Die String Function compare() vergleicht zwei character strings miteinander. Als Vergelichsbasis dient die Regel, die der Sortierreihenfolde (Collating Sequence) des Zeichsatzes zu Grunde liegt. Sie wird entweder über den Parameter "collation_name" oder "collation_id" angegeben werden kann.

Die String Funktion compare() gibt, abhänig von der gewählten Sortierreihenfolge unterschiedliche Werte zurück.

  • "1" zeigt, dass "char_expression1" oder "uchar_expression1" größer als "char_expression2" oder "uchar_expression2" ist.
  • "0" zeigt, dass "char_expression1" oder "uchar_expression1" gleich groß wie "char_expression2" oder "uchar_expression2" ist.
  • "-1" zeigt, dass "char_expression1" oder "uchar_expression1" kleiner als "char_expression2" oder "uchar_expression2" ist.

Syntax der String Function compare()

    compare ( {char_expression1 | uchar_expression1},
        {char_expression2 | uchar_expression2} ),
        [{collation_name | collation_id}]

Die Parameter der String Function compare()

"char_expression1" und "char_expression2"
Der Parameter "char_expression1" wird mit dem Parameter "char_expression2" verglichen. Beide Parameter müssen in entweder in einfachen oder doppelten Anführungsstrichen angegeben werden. Sie können weiterhin aus Variablen oder Konstanten bestehen und müssen in einem der Datentypen char, varchar, nchar oder nvarchar vorliegen.

"uchar_expression1" und "uchar_expression2"
Der Parameter "uchar_expression1" wird mit dem Parameter "uchar_expression2" verglichen. Beide Parameter müssen in entweder in einfachen oder doppelten Anführungsstrichen angegeben werden. Sie können weiterhin aus Variablen oder Konstanten bestehen und müssen in einem der Datentypen unichar oder univarchar vorliegen.

"collation_name" und "collation_id"
Der Parameter "collation_name" muss ein in einfachen oder doppelten Anführungsstrichen angegebener gültiger Name einer Sortierreihenfolge (collating name) sein. Siehe die unten stehende Tabelle "collation Namen und ids". Alternativ kann auch die "collation_id" angegeben werden. Wenn der Parameter "collation_name" oder "collation_id" nicht angegeben wird, so verwendet die Funktion automatisch die binäre Sortierreihenfolge.

collation Namen und ids
Beschreibung collation_name collation_id
Standard Unicode Mehrsprachig Standard 20
Thai Wörterbuch Sortierung thaidict 21
ISO14651 Standard iso14651 22
UTF-16 Sortierung – stimmt mit der UTF-8 Binärsortierung überein utf8bin 24
CP 850 Alternative – "no accent" altnoacc 39
CP 850 Alternative – Kleinbuchstaben zuerst altdict 45
CP 850 Westeuropäisch – Ohne Berücksichtigung von Groß- und Kleinschreibung altnocsp 46
CP 850 Skandinavisch – Wörterbuch Sortierung scandict 47
CP 850 Skandinavisch – "case-insensitive" scannocp 48
GB Pinyin gbpinyin n/a
Binäre Sortierung binary 50
Latin-1 Englische, Französische, Deutsche Wörterbuch Sortierung dict 51
Latin-1 Englische, Französische, Deutsche "no case" nocase 52
Latin-1 Englisch, Französisch, Deutsch "no case", "preference" nocasep 53
Latin-1 Englisch, Französisch, Deutsch "no accent" noaccent 54
Latin-1 Spanisches Wörterbuch espdict 55
Latin-1 Spanisch "no case" espnocs 56
Latin-1 Spanisch "no accent" espnoac 57
ISO 8859-5 Russisches Wörterbuch rusdict 58
ISO 8859-5 Russisch "no case" rusnocs 59
ISO 8859-5 Kyrillisches Wörterbuch cyrdict 63
ISO 8859-5 Kyrillisch "no case" cyrnocs 64
ISO 8859-7 Griechisch Wörterbuch elldict 65
ISO 8859-2 Ungarisches Wörterbuch hundict 69
ISO 8859-2 Ungarisch "no accents" hunnoac 70
ISO 8859-2 Ungarisch "no case" hunnocs 71
ISO 8859-9 Türkisches Wörterbuch turdict 72
ISO 8859-9 Türkisch "no accents" turknoac 73
ISO 8859-9 Türkisch "no case" turknocs 74
CP932 binäre Sortierung cp932bin 129
Chiniesisch phonetische Sortierung dynix 130
GB2312 binäre Sortierung gb2312bn 137
Gewöhnliches Kyrillisches Wörterbuch cyrdict 140
Türkisches Wörterbuch turdict 155
EUCKSC binäre Sortierung euckscbn 161
Chinesisch phonetische Sortierung gbpinyin 163
Russische Wörterbuch Sortierung rusdict 165
SJIS binäre Sortierung sjisbin 179
EUCJIS binäre Sortierung eucjisbn 192
BIG5 binäre Sortierung big5bin 194
Shift-JIS binäre Sortierung sjisbin 259

Beispiel für die String Function compare()

    select compare("abc", "xyz")
go
-----
-1

Gibt "-1" zurück, da die Werte "abc" kleiner als "xyz" ist.

    select compare("abc", "abc")
go
-----
0

Gibt "0" zurück, da die Werte "abc" gleich groß wie "abc" ist.

    select compare("xyz", "abc")
go
-----
1

Gibt "1" zurück, da die Werte "xyz" größer als "abc" ist.

    select compare("xyz", "abc", "binary")
go
-----
1

Wird binär sortiert. Gibt "1" zurück, da die Werte "xyz" größer als "abc" ist.

    select compare(("xyz"), ("abc"), (50))
go
-----
1

Hier wird zur binären Sortierung alternativ die "collating_id" angegeben. Gibt "1" zurück, da die Werte "xyz" größer als "abc" ist.

Probleme mit der Srting Funktion compare()

Die Funktion compare() kann beim Vergleich von zwei Werten für jedes zu vergleichende Zeichen bis zu 6 Bytes an Informationen erzeugen. Darum kann es vorkommen, dass das Speicherlimit erreicht wird. Dann wird das Ergebnis entsprechend gekürzt (truncated) zurückgegeben. Falls das der Fall ist wird eine Warnung ausgegeben, die Abfrage oder Transaktion wird aber nicht abgebrochen und läuft weiter. Das Speicherlimit der Srting Funktion ist von der Page Size des ASE®s abhängig. Wenn also die Rückgabewerte aus Mangel an Speicherplatz abgeschnitten werden müssen, dann richtet sich der Rückgabewert nach der maximalen Speichergröße für die entsprechenden DOL und APL Tabellen.

Locking scheme Page size Maximum row length Maximum column length
2K (2048 bytes) 1962 1960 bytes
4K (4096 bytes) 4010 4008 bytes
APL tables 8K (8192 bytes) 8106 8104 bytes
16K (16384 bytes) 16298 16296 bytes
2K (2048 bytes) 1964 1958 bytes
4K (4096 bytes) 4012 4006 bytes
DOL tables 8K (8192 bytes) 8108 8102 bytes
16K (16384 bytes) 16300 16294 bytes*
16K (16384 bytes) 16300** 8191-6-2 = 8183 bytes***
* wenn die Tabelle keine Spalten mit variablen Datentypen enthält.
** subject to a max start offset of varlen = 8191.
*** wenn die Tabelle mindestens eine Spalten mit variablen Datentypen enthält. Die Größe beinhaltet 6 bytes für den Zeilen overhead und 2 bytes für die Feldlänge.

Siehe auch:

ascii(),
char(),
char(n),
charindex(),
char_length(),
difference(),
lower(),
ltrim(),
patindex(),
replicate(),
reverse(),
right(),
rtrim(),
sortkey(),
soundex(),
space(),
str(),
String Funktionen,
stuff(),
substring(),
to_unichar(),
uhighsurr(),
ulowsurr(),
upper(),
uscalar().