Le funzioni ELT(), FIELD() e COALESCE()
Gli argomenti di questa pagina
|
La funzione ELT()
La funzione ELT() restituisce l'n-esimo elemento della lista di stringhe: str1 se N = 1, str2 se N = 2, e così via. Restituisce null se N è minore di 1 o maggiore del numero di argomenti.
ELT() è il complemento di FIELD().
La sintassi della funzione ELT()
index è un numero intero
string1, string2, ecc è una lista di stringhe separate da una virgola
Esempio teorico dell'uso della funzione ELT()
In questi primi esempi, senza alcuna pretesa ed apparentemente inutili, possiamo possiamo arrivare ad alcune riflessioni: con le prime due Query vengono estratti rispettivamente il quarto ed il secondo elemento della lista, mentre la terza e quarta Query restituiscono 'NULL' perchè gli indici non trovano alcun elemento. Queste Query potrebbero rispondere a questo quesito:
Estrarre e mostrare dalla lista gli elementi indicati dagli indici
esempio 1
|
1 record letti
|
Esempio pratico dell'uso della funzione ELT()
Mostrare la data di nascita dei contatti coi nomi della settimana e/o i nomi dei mesi in italiano
Questo che segue è, invece un esempio pratico da utilizzare in una tabella concreta. Iniziamo col vedere come il MYSQL, con le sue funzioni DAYNAME() e MONTHNAME(), ci restituisce i nomi dei giorni della settimana o i nomi dei mesi. Come si vede dall'esempio qui sotto i nomi vengono restituiti in inglese. Se vogliamo ottenere i nomi dei mesi o i nomi delle settimane in italiano è comodo affidarci a questa funzione.
Nomi dei giorni della settimana
|
1 record letti
|
||||||||||
Nomi dei mesi
|
1 record letti
|
Per raggiungere il nostro scopo possiamo usare la funzione ELT() indicando nella lista i nomi desiderati e per dargli una index valida usiamo le funzioni DAYOFWEEK() per i numeri dei giorni della settimana e MONTH() per i numeri dei mesi. In questo modo le due funzioni offrono l'index che serve per scegliere un nome indicato nella lista.
esempio per i nomi dei giorni
|
103 record trovati 12 record visualizzati
|
La funzione FIELD()
La funzione FIELD() restituisce l'indice (posizione) di str nella lista str1, str2, str3, .... Ma restituisce 0 se str non viene trovato.
La sintassi della funzione FIELD():
search string: la stringa da cercare nell'elenco delle stringhe
string1, .......... elenco delle stringhe
Esempio teorico per la funzione FIELD()
Se tutti gli argomenti della lista sono stringhe, tutti gli argomenti sono confrontati come stringhe, se sono numeri sono confrontati come numeri. La funzione non trova una sottostringa, ma la stringa intera.
In caso di fallimento la funzione FIELD() restituisce '0' (zero).
La funzione FIELD() è il complementare di ELT ().
esempio 1
|
1 record letti
|
Esempio pratico dell'uso della funzione FIELD()
Vediamo di risolvere un problema un po' insolito.
Mostra l'elenco dei miei contatti, ma metti in cima alla lista i nomi indicati, se esistgenti
In questo caso usiamo la funzione FIELD() nella clausola ORDER BY, usando il nome del campo per dargli il nome del contatto come search string ed alcuni nomi come stringhe da usare nella lista.
In questo modo i valori indicati vengono posti all'inizio o alla fine del resultset, dipendente dal DESC, a prescindere dall'ordine che i nomi avrebbero nel restante elenco ordinato o non ordinato.
In questo esempio ho usato due volte la funzione FIELD(): una per estrapolare i nomi, l'altra per estrapolare un cognome.
Il terzo elemento usato nella clausola ORDER BY è opzionale e permette di effettuare l'ordinamento anche sui restanti nomi.
|
103 record trovati 12 record visualizzati
|
In questo secondo esempio usiamo ancora la funzione FIELD() nella clausola WHERE per rispondere a questa Query:
Estrai dalla tabella dei contatti i nomi indicati nella lista
L'indicazione '> 0' che diamo nella WHERE serve perchè, come abbiamo detto più sopra, la funzione FIELD() restituisce l'indice (posizione) di str nella lista str1, str2, str3, .... Ma restituisce 0 se str non viene trovato.
|
7 record trovati 7 record visualizzati
|
La funzione COALESCE()
La funzione COALESCE() ritorna il primo valore non NULL da una lista, oppure NULL se tutti i falori sono nulli.
La sintassi della funzione COALESCE()
Esempio teorico per la funzione COALESCE()
Nelle righe della Query qui sotto alcuni possibili risultati ottenuti con diverse liste usate con la funzione COALESCE(). Come si noterà, tra le diverse liste date come argomento, ci sono degli elementi vuoti, quindi non NULL. Ebbene, l'elemento vuoto viene regolarmente intercettato.
Mostra il primo valore non NULL dalle seguenti liste
esempio 1
|
1 record letti
|
Esempio pratico dell'uso della funzione COALESCE()
Per questa serie di esempi useremo questa tabella. Come si nota dalle poche righe presentate, non tutti i contatti hanno tutti i telefoni e l'indirizzo E-Mail, ma in tutti i record, anche se qui non sono evidenziati per non creare confusione, i campi che qui si vedono vuoti, sono NULL.
12 record visualizzati
cognome | nome | tel_casa | tel_uff | cellulare | |
---|---|---|---|---|---|
Migliavacca | Luigi | NULL | 084 41655 | NULL | NULL |
Rizzi | Carlo | NULL | 07 9940508 | NULL | NULL |
Liberali | Franca | NULL | 036 348719 | NULL | NULL |
Di Maggio | Mario | 012 45 58 61 | 051 18752 | NULL | NULL |
Scicchitano | Andrea | NULL | 07 74891 | NULL | NULL |
Edelvisi | Maurizio | NULL | NULL | NULL | [email protected] |
Gerardini | Silvano | NULL | 012 164848 | NULL | NULL |
Pasotti | Alessio | NULL | 05 9552713 | NULL | NULL |
Calvi | Giovanni | NULL | 044 5602773 | NULL | NULL |
Poggi | Giuseppe | NULL | 08 0640120 | NULL | NULL |
Curti | Oreste | NULL | 027 42781 | NULL | NULL |
Borsotti | Mirella | NULL | 09 379786 | NULL | NULL |
... | ... | ... | ... | ... | ... |
Vedremo ora una sequenza di esempi sempre più evoluti. In questo primo esempio:
Dei miei contatti mostra il nominativo ed il primo telefono o E-Mail che hanno per essere contattati
In questo caso il telefono trovato o l'indirizzo E-Mail vengono mostrati in una colonna generica qui denominata 'contatto'. Leggendo il resultset ottenuto non è dato sapere che tipo di dato è rappresentato nella colonna 'contatgto'.
esempio 1
|
105 record trovati 12 record visualizzati
|
Ora vediamo come aggiustare la Query facendole mostrare anche il tipo di dato estratto.
Dei miei contatti mostra il primo telefono o E-Mail che hanno per essere contattati, ma mostra anche il tipo di dato mostrato
Alla Query vista più sopra aggiungo anche la funzione FIELD() che come primo argomento prende il risultato della funzione COALESCE().
Questa manovra fa sì che la Query restituisca anche un numero che indica quale elemento è stato prelevato. Ma ancora non basta. Nemmeno questo numero è molto eloquente.
esempio 1
|
105 record trovati 12 record visualizzati
|
Per raggiungere il nostro scopo occorre modificare ancora la Query appena vista.
Aggiungiamo la funzione ELT() che prenderà come primo argomento il risultato numerico restituito dalla funzione FIELD() che a sua volta prende come primo argomento il risultato restituito dalla funzione COALESCE().
E' così che nell'ultima colonna il tipo dato che abbiamo prelevato.
esempio 1
|
105 record trovati 12 record visualizzati
|