sql >> Database >  >> RDS >> MariaDB

Hoe LOCATE() werkt in MariaDB

In MariaDB, LOCATE() is een ingebouwde tekenreeksfunctie die de positie van het eerste voorkomen van een subtekenreeks binnen een andere tekenreeks retourneert.

LOCATE() lijkt op de INSTR() functie, behalve dat LOCATE() biedt de mogelijkheid om een ​​startpositie voor de zoekopdracht op te geven. Ook is de argumentvolgorde tussen deze twee functies omgekeerd.

Syntaxis

De LOCATE() functie ondersteunt een syntaxis met twee argumenten en een syntaxis met drie argumenten.

Syntaxis van twee argumenten:

LOCATE(substr,str)

Syntaxis van drie argumenten:

LOCATE(substr,str,pos)

Waar str is de string, substr is de substring die moet worden gevonden, en pos is de positie om de zoekopdracht te starten.

Voorbeeld

Hier is een eenvoudig voorbeeld:

SELECT LOCATE('hot', 'The hot sun');

Resultaat:

+------------------------------+
| LOCATE('hot', 'The hot sun') |
+------------------------------+
|                            5 |
+------------------------------+

Startpositie

Hier is een voorbeeld van het verstrekken van een startpositie voor de zoekopdracht:

SELECT LOCATE('hot', 'The hot sun is really hot', 8);

Resultaat:

+------------------------------------------------+
| LOCATE('hot', 'The hot sun is really hot', 8)  |
+------------------------------------------------+
|                                             23 |
+------------------------------------------------+

Hoofdlettergevoeligheid

LOCATE() voert een hoofdletterongevoelige zoekopdracht uit:

SELECT LOCATE('HOT', 'The hot sun');

Resultaat:

+------------------------------+
| LOCATE('HOT', 'The hot sun') |
+------------------------------+
|                            5 |
+------------------------------+

Meerdere gebeurtenissen

Als de subtekenreeks meer dan één keer voorkomt, wordt alleen de positie van de eerste (vanaf de startpositie) geretourneerd:

SELECT LOCATE('hot', 'The hot sun is really hot');

Resultaat:

+--------------------------------------------+
| LOCATE('hot', 'The hot sun is really hot') |
+--------------------------------------------+
|                                          5 |
+--------------------------------------------+

Hier is het met een startpositie:

SELECT LOCATE('hot', 'The hot sun is really hot', 20);

Resultaat:

+------------------------------------------------+
| LOCATE('hot', 'The hot sun is really hot', 20) |
+------------------------------------------------+
|                                             23 |
+------------------------------------------------+

Gedeeltelijke overeenkomst

Als de subtekenreeks deel uitmaakt van een groter woord, is het nog steeds een overeenkomst:

SELECT LOCATE('hot', 'The hottest sun');

Resultaat:

+----------------------------------+
| LOCATE('hot', 'The hottest sun') |
+----------------------------------+
|                                5 |
+----------------------------------+

Maar als de string slechts een deel van de substring is, is het geen overeenkomst:

SELECT LOCATE('hottest', 'The hot sun');

Resultaat:

+----------------------------------+
| LOCATE('hottest', 'The hot sun') |
+----------------------------------+
|                                0 |
+----------------------------------+

Spaties

Het spatieteken is nog steeds een tekenreeks, dus we kunnen spaties in de subtekenreeks opnemen, zelfs als dit het enige teken is:

SELECT LOCATE(' ', 'The hot sun');

Resultaat:

+----------------------------+
| LOCATE(' ', 'The hot sun') |
+----------------------------+
|                          4 |
+----------------------------+

Lege string

Dit is wat er gebeurt als de subtekenreeks een lege tekenreeks is:

SELECT LOCATE('', 'The hot sun');

Resultaat:

+---------------------------+
| LOCATE('', 'The hot sun') |
+---------------------------+
|                         1 |
+---------------------------+

Geen overeenkomst

Als de subtekenreeks niet in de tekenreeks wordt gevonden, LOCATE() retourneert 0 :

SELECT LOCATE('cold', 'The hot sun');

Resultaat:

+-------------------------------+
| LOCATE('cold', 'The hot sun') |
+-------------------------------+
|                             0 |
+-------------------------------+

Nullargumenten

null opgeven voor elk van de argumenten resulteert in null :

SELECT 
    LOCATE(null, 'The hot sun'),
    LOCATE('hot', null);

Resultaat:

+-----------------------------+---------------------+
| LOCATE(null, 'The hot sun') | LOCATE('hot', null) |
+-----------------------------+---------------------+
|                        NULL |                NULL |
+-----------------------------+---------------------+

Het verkeerde aantal argumenten opgeven

LOCATE() . aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:

SELECT LOCATE('hot');

Resultaat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOCATE'

  1. Oracle 11g op Mac OS X

  2. PostgreSQL-kolom bestaat niet, maar bestaat wel

  3. Hoe herstel in afwachting van status in SQL Server-database te herstellen?

  4. postgresql-poortverwarring 5433 of 5432?