sql >> Database teknologi >  >> RDS >> Oracle

INSTR() Funktion i Oracle

I Oracle er INSTR() funktionen søger efter en understreng i en given streng og returnerer et heltal, der angiver placeringen af ​​det første tegn i denne understreng. Hvis understrengen ikke findes, returnerer funktionen 0 .

INSTR() kræver mindst to argumenter; strengen og understrengen. Den accepterer også et valgfrit tredje og fjerde argument, der giver dig mulighed for at angive startpositionen for at søge, og hvilken forekomst der skal søges efter.

INSTR() kan også opfattes som en gruppe af funktioner. Der er fem separate funktioner; INSTR() , INSTRB() , INSTRC() , INSTR2() , og INSTR4() . Hver funktion beregner længden på en anden måde.

Syntaks

Syntaksen ser sådan ud:

{ INSTR| INSTRB| INSTRC| INSTR2| INSTR4}(streng , understreng [, position [, forekomst ] ])

Hvor streng er strengen, der skal søges i, understreng er den understreng, der skal findes, position er startpositionen for understrengen og forekomst er, hvilken forekomst der skal findes.

Funktionerne beregner længder som følger:

Funktion Beregner længde ved hjælp af...
INSTR() Tegn som defineret af inputtegnsættet, hvor det første tegn i strengen har position 1.
INSTRB() Bytes
INSTRC() Complete Unicode-tegn
INSTR2() UCS2-kodepunkter
INSTR4() UCS4-kodepunkter

Eksempel

Her er et grundlæggende eksempel:

VÆLG INSTR('Big fat cat', 'fat')FROM DUAL; 

Resultat:

5

Sammenlignet med INSTRB()

Dette eksempel viser, hvordan resultaterne kan variere, afhængigt af hvilken specifik funktion du bruger, og det involverede tegnsæt.

I dette tilfælde sammenligner vi INSTR() med INSTRB() :

VÆLG INSTR('Böyük yağlı pişik', 'yağlı') AS INSTR, INSTRB('Böyük yağlı pişik', 'yağlı') SOM INSTRBFRA DUAL; 

Resultat:

 INSTR INSTRB ________ ______ 7 9

Vi kan se, at de to funktioner gav to forskellige resultater. Dette skyldes, at nogle tegn i denne streng bruger to bytes.

INSTR() funktion returnerer positionen som defineret af inputtegnsættet, hvorimod INSTRB() funktion returnerer positionen baseret i bytes .

Hvis vi vender tilbage til den oprindelige streng, er resultaterne de samme mellem de to funktioner:

VÆLG INSTR('Big fat cat', 'fat') AS INSTR, INSTRB('Big fat cat', 'fat') AS INSTRBFROM DUAL; 

Resultat:

 INSTR INSTRB ________ ______ 5 5 

Det skyldes, at denne streng kun bruger én byte pr. tegn, og så længden i bytes er den samme som antallet af tegn.

Startposition

Her er et eksempel, der specificerer den position, som søgningen skal startes efter:

SELECT INSTR('Den fede kat', 'at', 8)FRA DUAL; 

Resultat:

11

I dette tilfælde starter søgningen ved position 8, hvilket er efter de to første forekomster. Derfor får vi stillingen til den tredje kamp.

Angiv hvilken forekomst

Her er et eksempel på at specificere, hvilken forekomst der skal findes:

VÆLG INSTR('Den fede kat', 'at', 1, 2)FRA DUAL; 

Resultat:

7

I dette tilfælde startede vi ved position 1 og søgte derefter efter den anden forekomst fra den startposition.

Her er det igen, men denne gang sammenligner vi tre forskellige værdier for forekomsten argument:

SELECT INSTR('Den fede kat', 'at', 1, 1) AS "o1", INSTR('Den tykke kat', 'at', 1, 2) SOM "o2", INSTR ('Den fede kat', 'at', 1, 3) SOM "o3"FRA DUAL; 

Resultat:

 o1 o2 o3 _____ _____ _____ 3 7 11

Men her er, hvad der sker, hvis vi øger positionen argument:

SELECT INSTR('Den tykke kat', 'at', 5, 1) AS "o1", INSTR('Den tykke kat', 'at', 5, 2) SOM "o2", INSTR ('Den fede kat', 'at', 5, 3) SOM "o3"FRA DUAL; 

Resultat:

 o1 o2 o3 _____ _____ _____ 7 11 0 

I dette tilfælde får vi ikke positionen for den første forekomst, fordi den er placeret før vores startposition. Vi får også 0 i den tredje kolonne, fordi der ikke er nogen tredje forekomst baseret på vores startposition.

Negativ position

Angivelse af en negativ værdi for positionen bevirker, at startpositionen tælles bagud fra slutningen af ​​strengen, og Oracle søger baglæns fra denne position:

VÆLG INSTR('Den fede kat', 'ved', -3)FRA DUAL; 

Resultat:

7

Og enhver forekomst, der er angivet, tælles tilbage fra den position:

VÆLG INSTR('Den fede kat', 'at', -3, 2)FRA DUAL; 

Resultat:

3

Nul-argumenter

Hvis nogen (eller alle) af argumenterne er null , resultatet er 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('Kaffe', 'f', 1, null) AS r4FROM DUAL; 

Resultat:

 R1 R2 R3 R4 _______ _______ _______ _______ null null null null

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Forkert antal argumenter

Kalder INSTR() uden at sende nogen argumenter resulterer det i en fejl:

VÆLG INSTR()FRA DUAL; 

Resultat:

Fejl starter på linje:1 i kommando -SELECT INSTR()FROM DUALEfejl på kommandolinje:1 Kolonne:8Fejlrapport -SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter for funktion"*Årsag:*Handling:

Og at sende for mange argumenter resulterer også i en fejl:

SELECT INSTR('Big fat cat', 'at', 1, 2, 3)FROM DUAL; 

Resultat:

Fejl starter på linje:1 i kommando -SELECT INSTR('Big fat cat', 'at', 1, 2, 3)FROM DUALEfejl på kommandolinje:1 kolonne:38Fejlrapport -SQL-fejl:ORA-00939:for mange argumenter til funktion00939. 00000 - "for mange argumenter for funktion"*Årsag:*Handling:

  1. Sådan finder du et listeelement på en specificeret position i MySQL

  2. Søvnfunktion i ORACLE

  3. Søgning efter databaseobjekter og tabeldata i SQL Server

  4. Køre en mySQL-forespørgsel som et cron-job?