In Oracle das TRANSLATE()
Mit dieser Funktion können Sie mehrere einzelne Zeichen eins zu eins in einem Vorgang ersetzen.
Es gibt die als erstes Argument bereitgestellte Zeichenfolge zurück, nachdem einige im zweiten Argument angegebene Zeichen in einen im dritten Argument angegebenen Zielsatz von Zeichen übersetzt wurden.
Es ähnelt dem REPLACE()
Funktion, außer dass REPLACE()
Funktion ersetzt den gesamten String durch einen anderen String (d.h. nicht zeichenweise, wie TRANSLATE()
tut).
Syntax
Die Syntax lautet wie folgt:
TRANSLATE(expr, from_string, to_string)
Die Funktion gibt expr
zurück mit allen Vorkommen jedes Zeichens in from_string
durch das entsprechende Zeichen in to_string
ersetzt .
Beispiel
Hier ist ein einfaches Beispiel:
SELECT
TRANSLATE('Cat', 'at', 'ow')
FROM DUAL;
Ergebnis:
Cow
Hier der a
und t
Zeichen wurden durch o
ersetzt und w
.
In diesem Fall das REPLACE()
Die Funktion hätte das gleiche Ergebnis geliefert. Hier sind die beiden Funktionen nebeneinander:
SELECT
TRANSLATE('Cat', 'at', 'ow') AS "TRANSLATE",
REPLACE('Cat', 'at', 'ow') AS "REPLACE"
FROM DUAL;
Ergebnis:
TRANSLATE REPLACE ____________ __________ Cow Cow
In diesem Fall ist das Ergebnis für beide Funktionen gleich, aber aus unterschiedlichen Gründen.
Hier ist, was jede Funktion gemacht hat:
TRANSLATE()
ersetzta
undt
(jedes einzelne Zeichen)REPLACE()
ersetztat
(die Zeichenkette)
Gemischte Bestellung
Dieses Beispiel zeigt, wo TRANSLATE()
unterscheidet sich von REPLACE()
. In diesem Beispiel ändere ich die Reihenfolge der zu ersetzenden Zeichen sowie die Zeichen, die sie ersetzen sollen:
SELECT
TRANSLATE('Cat', 'ta', 'wo') AS "TRANSLATE",
REPLACE('Cat', 'ta', 'wo') AS "REPLACE"
FROM DUAL;
Ergebnis:
TRANSLATE REPLACE ____________ __________ Cow Cat
In diesem Fall nur das TRANSLATE()
Funktion wirksam wurde. Dies liegt daran, dass diese Funktion jedes Zeichen einzeln durchgeht. Das REPLACE()
Die Funktion hingegen sucht nach der gesamten Zeichenfolge in genau derselben Reihenfolge.
Ein leistungsfähigeres Beispiel
Dieses Beispiel zeigt ein Szenario, in dem TRANSLATE()
Funktion hat einen erheblichen Vorteil gegenüber REPLACE()
Funktion:
SELECT
TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()')
FROM DUAL;
Ergebnis:
2*(3+4)/(7-2)
Um das entsprechende Ergebnis zu erhalten, verwenden Sie REPLACE()
-Funktion müssen wir Folgendes tun:
SELECT
REPLACE
(
REPLACE
(
REPLACE
(
REPLACE
(
'2*[3+4]/{7-2}',
'[',
'('
),
']',
')'
),
'{',
'('
),
'}',
')'
)
FROM DUAL;
Ergebnis:
2*(3+4)/(7-2)
Das obige Beispiel basiert auf der Microsoft-Dokumentation für T-SQL TRANSLATE()
Funktion, die der Oracle-Version ähnlich ist.
Keine Übereinstimmung
Wenn es keine Übereinstimmungen gibt, TRANSLATE()
gibt den String unverändert zurück:
SELECT
TRANSLATE('Cat', 'x', 'y')
FROM DUAL;
Ergebnis:
Cat
Groß-/Kleinschreibung
Das TRANSLATE()
Funktion führt einen Vergleich zwischen Groß- und Kleinschreibung durch:
SELECT
TRANSLATE('Cat', 'AT', 'ow')
FROM DUAL;
Ergebnis:
Cat
In diesem Beispiel stimmte die Groß-/Kleinschreibung nicht, und daher wurde die ursprüngliche Zeichenfolge unverändert zurückgegeben.
Leere Zeichenfolgen
Folgendes passiert, wenn für jedes angegebene Argument eine leere Zeichenfolge übergeben wird:
SET NULL 'null';
SELECT
TRANSLATE('Cat', 'at', '') AS r1,
TRANSLATE('Cat', '', 'ow') AS r2,
TRANSLATE('', 'at', 'ow') AS r3
FROM DUAL;
Ergebnis:
R1 R2 R3 _______ _______ _______ null null null
Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null
tritt als Ergebnis eines SQL SELECT
auf Erklärung.
Sie können jedoch SET NULL
verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null
zurückgegeben werden soll.
Leerzeichen
Die leere Zeichenfolge ist nicht dasselbe wie das Leerzeichen.
Folgendes passiert, wenn wir die leere Zeichenfolge in ein Leerzeichen ändern:
SELECT
TRANSLATE('Cat', 'at', ' ') AS r1,
TRANSLATE('Cat', ' ', 'ow') AS r2,
TRANSLATE(' ', 'at', 'ow') AS r3
FROM DUAL;
Ergebnis:
R1 R2 R3 _____ ______ _____ C Cat
Hier ist ein Beispiel, das veranschaulicht, wie TRANSLATE()
und REPLACE()
gibt unterschiedliche Ergebnisse zurück, wenn das Leerzeichen verwendet wird:
SELECT
TRANSLATE(' ', ' ', 'Cow') AS TRANSLATE,
REPLACE(' ', ' ', 'Cow') AS REPLACE
FROM DUAL;
Ergebnis:
TRANSLATE REPLACE ____________ __________ C Cow
Null-Argumente
Übergabe von null
für jedes Argument gibt null
zurück :
SET NULL 'null';
SELECT
TRANSLATE(null, 'dog', 'cat') AS "1",
TRANSLATE('Black dog', null, 'cat') AS "2",
TRANSLATE('Black dog', 'dog', null) AS "3"
FROM DUAL;
Ergebnis:
1 2 3 _______ _______ _______ null null null
Fehlende Argumente
Aufruf von TRANSLATE()
ohne Argumente zu übergeben führt zu einem Fehler:
SELECT TRANSLATE()
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT TRANSLATE() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Zu viele Argumente
Und das Übergeben zu vieler Argumente gibt einen Fehler zurück:
SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT TRANSLATE('Cat', 'a', 'b', 'c') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: