In Oracle der INSTR()
Die Funktion sucht nach einer Teilzeichenfolge in einer gegebenen Zeichenfolge und gibt eine ganze Zahl zurück, die die Position des ersten Zeichens dieser Teilzeichenfolge angibt. Wenn der Teilstring nicht gefunden wird, gibt die Funktion 0
zurück .
INSTR()
erfordert mindestens zwei Argumente; die Zeichenfolge und die Teilzeichenfolge. Es akzeptiert auch ein optionales drittes und viertes Argument, mit denen Sie die Startposition für die Suche angeben können und nach welchem Vorkommen gesucht werden soll.
INSTR()
kann auch als eine Gruppe von Funktionen betrachtet werden. Es gibt fünf separate Funktionen; INSTR()
, INSTRB()
, INSTRC()
, INSTR2()
, und INSTR4()
. Jede Funktion berechnet die Länge anders.
Syntax
Die Syntax sieht so aus:
{ INSTR
| INSTRB
| INSTRC
| INSTR2
| INSTR4
}
(string , substring [, position [, occurrence ] ])
Wobei string
ist die zu durchsuchende Zeichenfolge, substring
ist die zu suchende Teilzeichenfolge, position
ist die Startposition der Teilzeichenfolge und occurrence
ist das zu findende Vorkommen.
Die Funktionen berechnen Längen wie folgt:
Funktion | Berechnet die Länge mit … |
---|---|
INSTR() | Zeichen wie durch den Eingabezeichensatz definiert, wobei das erste Zeichen der Zeichenfolge die Position 1 hat. |
INSTRB() | Bytes |
INSTRC() | Vollständige Unicode-Zeichen |
INSTR2() | UCS2-Codepunkte |
INSTR4() | UCS4-Codepunkte |
Beispiel
Hier ist ein einfaches Beispiel:
SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;
Ergebnis:
5
Verglichen mit INSTRB()
Dieses Beispiel zeigt, wie sich die Ergebnisse je nach verwendeter spezifischer Funktion und verwendetem Zeichensatz unterscheiden können.
In diesem Fall vergleichen wir INSTR()
mit INSTRB()
:
SELECT
INSTR('Böyük yağlı pişik', 'yağlı') AS INSTR,
INSTRB('Böyük yağlı pişik', 'yağlı') AS INSTRB
FROM DUAL;
Ergebnis:
INSTR INSTRB ________ _________ 7 9
Wir können sehen, dass die beiden Funktionen zwei unterschiedliche Ergebnisse zurückgegeben haben. Dies liegt daran, dass einige Zeichen in dieser Zeichenfolge zwei Bytes verwenden.
Der INSTR()
Die Funktion gibt die Position zurück, wie sie durch den Eingabezeichensatz definiert ist, während die INSTRB()
Funktion gibt die Position basierend auf Bytes zurück .
Wenn wir zum ursprünglichen String zurückkehren, sind die Ergebnisse zwischen den beiden Funktionen gleich:
SELECT
INSTR('Big fat cat', 'fat') AS INSTR,
INSTRB('Big fat cat', 'fat') AS INSTRB
FROM DUAL;
Ergebnis:
INSTR INSTRB ________ _________ 5 5
Das liegt daran, dass diese Zeichenfolge nur ein Byte pro Zeichen verwendet, und daher ist die Länge in Bytes gleich der Anzahl der Zeichen.
Startposition
Hier ist ein Beispiel, das die Position angibt, für die die Suche gestartet werden soll:
SELECT INSTR('That fat cat', 'at', 8)
FROM DUAL;
Ergebnis:
11
In diesem Fall beginnt die Suche an Position 8, also nach den ersten beiden Vorkommen. Daher erhalten wir die Position des dritten Spiels.
Geben Sie an, welches Vorkommen
Hier ist ein Beispiel für die Angabe, welches Vorkommen gesucht werden soll:
SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;
Ergebnis:
7
In diesem Fall haben wir bei Position 1 begonnen und dann von dieser Startposition aus nach dem zweiten Vorkommen gesucht.
Hier ist es wieder, aber dieses Mal vergleichen wir drei verschiedene Werte für das occurrence
Argument:
SELECT
INSTR('That fat cat', 'at', 1, 1) AS "o1",
INSTR('That fat cat', 'at', 1, 2) AS "o2",
INSTR('That fat cat', 'at', 1, 3) AS "o3"
FROM DUAL;
Ergebnis:
o1 o2 o3 _____ _____ _____ 3 7 11
Aber Folgendes passiert, wenn wir die position
Argument:
SELECT
INSTR('That fat cat', 'at', 5, 1) AS "o1",
INSTR('That fat cat', 'at', 5, 2) AS "o2",
INSTR('That fat cat', 'at', 5, 3) AS "o3"
FROM DUAL;
Ergebnis:
o1 o2 o3 _____ _____ _____ 7 11 0
In diesem Fall erhalten wir nicht die Position des ersten Vorkommens, da sie vor unserer Startposition liegt. Wir erhalten auch 0
in der dritten Spalte, weil es basierend auf unserer Startposition kein drittes Vorkommen gibt.
Negative Position
Die Angabe eines negativen Werts für die Position bewirkt, dass die Startposition vom Ende der Zeichenfolge rückwärts gezählt wird und Oracle von dieser Position aus rückwärts sucht:
SELECT INSTR('That fat cat', 'at', -3)
FROM DUAL;
Ergebnis:
7
Und jedes angegebene Vorkommen wird ab dieser Position rückwärts gezählt:
SELECT INSTR('That fat cat', 'at', -3, 2)
FROM DUAL;
Ergebnis:
3
Null-Argumente
Wenn eines (oder alle) Argumente null
sind , ist das Ergebnis null
:
SET NULL 'null';
SELECT
INSTR(null, 'f', 1, 1) AS r1,
INSTR('Coffee', null, 1, 1) AS r2,
INSTR('Coffee', 'f', null, 1) AS r3,
INSTR('Coffee', 'f', 1, null) AS r4
FROM DUAL;
Ergebnis:
R1 R2 R3 R4 _______ _______ _______ _______ null 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.
Falsche Argumentanzahl
Aufruf von INSTR()
ohne Übergabe von Argumenten ergibt sich ein Fehler:
SELECT INSTR()
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT INSTR() 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:
Und die Übergabe zu vieler Argumente führt ebenfalls zu einem Fehler:
SELECT INSTR('Big fat cat', 'at', 1, 2, 3)
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT INSTR('Big fat cat', 'at', 1, 2, 3) FROM DUAL Error at Command Line : 1 Column : 38 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: