Le funzioni MYSQL INSTR() POSITION() LOCATE()

Gli argomenti di questa pagina

  • Sintassi della funzione INSTR()
  • Sintassi della funzione POSITION()
  • Sintassi della funzione LOCATE()
  • La funzione LOCATE() nidificata

Sintassi della funzione INSTR()

La funzione MYSQL INSTR() prende una stringa e una sua sottostringa come argomenti, e restituisce un intero che indica la posizione della prima occorrenza della sottostringa all'interno della stringa. Se la sottostringa non viene trovata la funzione restituisce 0 (zero).
Questa è la sintassi usata dalla funzione INSTR().

INSTR (str, sub_str)

str è la stringa in oggetto
sub_str è la sottostringa da cercare

Il suo uso è semplice e non ci sono argomenti facoltativi su cui lavorare.

esempio 1
1
2
3
4
5

SELECT body, INSTR(body, 'funzione' ) AS pos
FROM sql_articoli
WHERE id = 6
1 record letti
body pos
La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alla funzione readdir() e alla funzione closedir(). 4

Sintassi della funzione POSITION()

Come per la funzione INSTR la funzione MySQL POSITION() restituisce un intero che indica la posizione di una sottostringa in una stringa.

POSITION(substr IN str)

sub_str è la sottostringa da cercare
IN è una parola riservata per indicare dove cercare la sottostringa
str è la stringa in oggetto

Anche in questo caso l'uso della funzione POSITION() è semplice e non prevede altri argomenti.

esempio 2
1
2
3
4
5

SELECT body, POSITION('funzione' IN body) AS pos
FROM sql_articoli
WHERE id = 6
1 record letti
body pos
La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alla funzione readdir() e alla funzione closedir(). 4

Sintassi della funzione LOCATE()

Anche la funzione LOCATE restituisce la posizione della prima occorrenza di una sottostringa all'interno di una stringa, entrambe passate come argomento della funzione.
Però, a differenza delle altre viste qui sopra, può essere utilizzato un terzo argomento per indicare da quale posizione iniziare la ricerca.
Se questo argomento è omesso, la ricerca parte dall'inizio della stringa.

LOCATE(sub_str, str[, position])

sub_str è la sottostringa da cercare
str è la stringa in oggetto
position, se indicato, indica la posizione da dove iniziare la ricerca della sottostringa.

In questo esempio viene individuata la prima occorrenza della sottostringa funzione e ne viene restituita la sua posizione nella stringa in oggetto.

esempio 3
1
2
3
4
5

SELECT body, LOCATE('funzione', body) AS pos
FROM sql_articoli
WHERE id = 6
1 record letti
body pos
La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alla funzione readdir() e alla funzione closedir(). 4

Nell'esempio che segue viene indicato il terzo argomento della funzione. Essendo questo argomento più basso del reale valore, viene restituita la stessa posizione come se partisse dall'inizio.

esempio 4
1
2
3
4
5

SELECT body, LOCATE('funzione', body, 3) AS pos
FROM sql_articoli
WHERE id = 6
1 record letti
body pos
La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alla funzione readdir() e alla funzione closedir(). 4

Se, come nel prossimo esempio, come terzo argomento, viene usato un valore, senz'altro più alto della posizione della prima occorrenza della sottostringa funzione, ma più basso della posizione della seconda occorrenza, viene restituita la posizione della seconda occorrenza della sottostringa funzione.

esempio 5
1
2
3
4
5

SELECT body, LOCATE('funzione', body, 100) AS pos
FROM sql_articoli
WHERE id = 6
1 record letti
body pos
La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alla funzione readdir() e alla funzione closedir(). 146

Nell'esempio che segue, come terzo argomento della funzione LOCATE(), viene indicato un valore eccessivamente elevato. Ne consegue che la sottostringa funzione non viene trovata dopo tale posizione e viene restituito 0 (zero - non trovato).

esempio 6
1
2
3
4
5

SELECT body, LOCATE('funzione', body, 500) AS pos
FROM sql_articoli
WHERE id = 6
1 record letti
body pos
La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alla funzione readdir() e alla funzione closedir(). 0

La funzione LOCATE() nidificata

In questo ultimo esempio la funzione LOCATE() viene nidificata.
Anche in questo casxo ho volutamente limitato a 4 il recordset finale per non creare confusione e per osservare i risultati in diversi contesti.
Ho creato tre campi differenti per vedere come possono presentarsi i risultati.
Nelle tre sintassi, proposte qui di seguito, sono evidenziate le varie nidificazioni. L'ordine di esecuzione delle varie parti dell'istruzione nel suo complesso avviene sempre dalla parte più interna verso l'esterno.

Il primo campo LOCATE('funzione', body) AS pos1 Questa è l'istruzione più semplice e restituisce la prima occorrenza della sottostringa.
Il secondo campo LOCATE('funzione', body, LOCATE('funzione', body)+1) AS pos2 Questa istruzione vuole restituire la seconda occorrenza della sottostringa. L'istruzione nidificata restituisce a quella esterna il valore della posizione della prima occorrenza della sottostringa cercata.
Il terzo campo LOCATE( 'funzione', body, LOCATE( 'funzione', body, LOCATE( 'funzione', body ) +1 ) +1 ) AS pos3 Questa istruzione è ancora più complessa e vuole restituire la terza occorrenza della sottostringa cercata.
Si parte dall'istruzione più interna (rossa) che offre all'istruzione che la contiene il valore della prima occorrenza della stringa cercata.
Il risultato di queste due istruzioni viene restituito all'istruzione principale come terzo argomento per cercare la terza occorrenza della sottostringa cercata.

Dai record visualizzati vediamo alcuni risultati strani che tuttavia strani non sono.
In tutti cerchiamo la sottostringa funzione.

La query presentata:

  • nel primo record visualizzato trova e mostra le tre posizioni occupate dalla sottostringa cercata
  • nel secondo record mostra solo le prime due occorrenze perchè manca la terza
  • nel terzo record avviene una cosa strana:
    valore della prima occorrenza
    nessun valore per la seconda occorrenza
    un valore uguale al primo per la terza occorrenza
    in realtà trova solo una occorrenza della sottostringa cercata ma restituisce un terzo valore perchè per trovare questo la ricerca parte da 0
  • nel quarto record non viene trovata nessuna occorrenza della sottostringa cercata

Qui di seguito un esempio di quanto è stato detto.

esempio 7
1
2
3
4
5
6
7
8
9
10

SELECT body, LOCATE('funzione', body) AS pos1, 
LOCATE('funzione', body, 
LOCATE('funzione', body)+1) AS pos2, 
LOCATE( 'funzione', body, 
LOCATE( 'funzione', body, 
LOCATE( 'funzione', body ) +1 ) +1 ) AS pos3
FROM sql_articoli
WHERE id IN (6, 13, 14, 21)
4 record letti
body pos1 pos2 pos3
La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alla funzione readdir() e alla funzione closedir(). 4 146 172
La funzione count_chars(), da non confondere con la funzione strlen(), restituisce informazioni sui caratteri utilizzati in una stringa (ad esempio, quante volte un carattere ASCII compare in una stringa). Restituisce i risultati in vari modi, a seconda del secondo argomento facoltativo. 4 53 0
La funzione SUBSTRING_INDEX() restituisce la sottostringa dalla stringa dando un determinato numero di occorrenze di un delimitatore. La stringa restituita dalla sinistra del delimitatore finale quando il numero specificato è un numero positivo e da destra del delimitatore finale quando il numero specificato è un numero negativo. Se il numero specificato è maggiore del numero di occorrenza di delimitatore, la stringa restituita sarà la stringa totale. 4 0 4
Il database o banca dati o base di dati, indica un archivio dati, o un insieme di archivi, in cui le informazioni sono distribuite e a volte collegate tra loro mediante una serie di tabelle in modo da consentire in modo più o meno efficiente la gestione dei dati mediante Query (richieste o interrogazioni). Quindi iniziamo a crearci una immagine fisica su cosa è e su cosa rappresenta un DB. 0 0 0

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum