Oracle
 sql >> Datenbank >  >> RDS >> Oracle

INSTR()-Funktion in Oracle

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: