sql >> Databáze >  >> RDS >> Mysql

Jak funguje funkce LOCATE() v MySQL

V MySQL je to LOCATE() Funkce vrací pozici podřetězce v řetězci. Přesněji řečeno, vrací pozici prvního výskytu v řetězci nebo prvního výskytu za daným počátečním bodem.

Syntaxe

Lze jej použít jedním z následujících způsobů:

LOCATE(substr,str)
LOCATE(substr,str,pos)

Kde substr je podřetězec, který se má vyhledat, a str je řetězec, který se má hledat.

Při použití druhé syntaxe pos je pozice pro zahájení vyhledávání.

Příklad 1 – První syntaxe

Zde je příklad použití první syntaxe:

SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;

Výsledek:

+--------+
| Result |
+--------+
|      5 |
+--------+

Příklad 2 – Druhá syntaxe

Zde je příklad, kdy určíme počáteční pozici pro zahájení vyhledávání:

SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;

Výsledek:

+--------+
| Result |
+--------+
|     31 |
+--------+

V tomto případě první výskyt cat začíná na pozici 5, ale zadal jsem vyhledávání tak, aby začínalo na pozici 6. Pozice dalšího výskytu tohoto řetězce byla tedy ta, která byla vrácena.

Všimněte si, že ačkoli vyhledávání začalo na pozici 6, funkce stále vrací pozici podřetězce v řetězci – nikoli z počáteční pozice.

Zde je další příklad, který vám to pomůže objasnit.

SELECT 
  LOCATE('c', 'a b c', 1) AS 'Result 1',
  LOCATE('c', 'a b c', 2) AS 'Result 2',
  LOCATE('c', 'a b c', 4) AS 'Result 3';

Výsledek:

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        5 |        5 |        5 |
+----------+----------+----------+

Výsledek je stejný bez ohledu na to, kde začneme hledat.

Příklad 3 – Vyhledání části slova

Podřetězec může být součástí delšího slova:

SELECT LOCATE('sing', 'Increasingly') AS Result;

Výsledek:

+--------+
| Result |
+--------+
|      7 |
+--------+

Ve skutečnosti neexistuje žádný požadavek, aby to bylo slovo (koneckonců, jednoduše hledáme řetězec):

SELECT 
  LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1',
  LOCATE(' ', 'a b c') AS 'Result 2',
  LOCATE(',', 'cat, dog, bird') AS 'Result 3';

Výsledek:

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        6 |        2 |        4 |
+----------+----------+----------+

Příklad 4 – Žádné shody

Pokud podřetězec není nalezen, 0 je vráceno:

SELECT LOCATE('Bat', 'Increasingly') AS Result;

Výsledek:

+--------+
| Result |
+--------+
|      0 |
+--------+

Příklad 5 – Rozlišování malých a velkých písmen

Tato funkce je bezpečná pro více bajtů a rozlišuje malá a velká písmena pouze v případě, že alespoň jeden argument je binární řetězec.

Proto následující funguje na nebinárních řetězcích, i když se velikost písmen neshoduje:

SELECT LOCATE('Sing', 'Increasingly') AS Result;

Výsledek:

+--------+
| Result |
+--------+
|      7 |
+--------+

Pokud ale použijeme binární řetězec, stane se toto:

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('Sing', @str) AS Result;

Výsledek:

+--------+
| Result |
+--------+
|      0 |
+--------+

Ale samozřejmě, když to změníme tak, aby se velká a malá písmena shodovala, dostaneme shodu:

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('sing', @str) AS Result;

Výsledek:

+--------+
| Result |
+--------+
|      7 |
+--------+

Příklad 6 – Argumenty NULL

Pokud je některý z argumentů NULL , NULL je vráceno:

SELECT 
  LOCATE(NULL, 'Increasingly') a,
  LOCATE('Bat', NULL) b,
  LOCATE('Bat', 'Increasingly', NULL) c;

Výsledek:

+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

  1. Zkontrolujte, zda je objekt uloženou procedurou pomocí OBJECTPROPERTY() na serveru SQL Server

  2. Oracle 12cR2 nyní v beta verzi

  3. Jak uložím řetězec delší než 4000 znaků v databázi Oracle pomocí Java/JDBC?

  4. Kde PostgreSQL ukládá databázi?