Funzione REPLACE()

Gli argomenti di questa pagina

  • Definizione della funzione REPLACE()
  • La sintassi
  • Due test generici
  • Due test su tabella reale
  • Ricerca per numero telefonico
  • Come rendere la funzione MYSQL REPLACE case-insensitive

Definizione della funzione REPLACE()

La funzione REPLACE() può essere utilizzata per cambiare il contenuto di un record estratto da un DB. E' possibile sostituire un dato valore all'interno di uno specifico campo in maniera semplice e può essere messa in opera con una semplice istruzione SQL utilizzando la funzione REPLACE() messa a disposizione nativamente dal DBMS MySQL.

La sintassi

REPLACE(str, find_string, replace_with)

str è la stringa (il campo) in esame
find_string è la stringa da cercare
replace_with è la stringa che sostituirà ogni occorrenza di find_string

La funzione cerca la stringa indicata e, se la trova, la sostituisce con la nuova stringa in tutte le sue occorrenze.

NB
La funzione è case-sensitive

Due test generici

In 'Mario' cerca la 'i' e sostituiscila con la 'c'
In 'Corto' cerca la 'o' e sostituiscila con la 'a'

esempio 1
1
2
3
4
<?php
$Query 
"SELECT REPLACE('Mario','i','c') AS NuovoNome
"
;
?>
1 record letti
NuovoNome
Marco
altro esempio
1
2
3
4
<?php
$Query 
"SELECT REPLACE('corto','o','a') AS NuovoNome
"
;
?>
1 record letti
NuovoNome
carta

Sostituisci tutta la punteggiatura nella frase

Il compito che questa query deve assolvere è più complesso. Per sostituire tutti i possibili caratteri di punteggiatura possiamo seguire due strade:

  • eseguire una Query per ogni carattere da sostituire
  • annidare, nidificare più funzioni REPLACE() in una unica Query

Con la nidificazione l'esecuzione delle istruzioni avvengono dall'interno verso l'esterno.

esempio 2
1
2
3
4
5
6
<?php
$stringa 
"In questa stringa, tanto per fare un esempio, c'è una serie di punteggiatura; la punteggiatura verrà rimossa";
$Query "SELECT REPLACE( REPLACE( REPLACE('".addslashes($stringa)."','.',' '), ';', ' '), ',', ' ') AS NuovaStringa
"
;
echo 
"<p>La stringa in esame:<br />" $stringa "</p>\n";
?>

La stringa in esame:
In questa stringa, tanto per fare un esempio, c'è una serie di punteggiatura; la punteggiatura verrà rimossa

1 record letti
NuovaStringa
In questa stringa tanto per fare un esempio c'è una serie di punteggiatura la punteggiatura verrà rimossa

Due test su tabella reale

Aggiungi uno spazio prima e dopo la barra '/' che separa porzioni di un indirizzo

esempio pratico 1
1
2
3
4
5
6
7
8
<?php
$Query 
"
SELECT id, cognome, nome, indirizzo, 
replace( indirizzo, '/', ' / ' ) AS newInd
FROM `sql_agenda`
WHERE indirizzo LIKE '%/%'
"
;
?>
25 record trovati
15 record visualizzati
id cognome nome indirizzo newInd
2 Rizzi Carlo VIA SABIN, 34/2 VIA SABIN, 34 / 2
5 Scicchitano Andrea VIA SABIN, 34/2 VIA SABIN, 34 / 2
8 Pasotti Alessio VIA SABIN, 34/2 VIA SABIN, 34 / 2
9 Calvi Giovanni VIA SABIN, 34/2 VIA SABIN, 34 / 2
10 Poggi Giuseppe VIA SABIN, 34/2 VIA SABIN, 34 / 2
17 Bazzotti Pietro VIA SABIN, 34/2 VIA SABIN, 34 / 2
20 Traina Giovanni VIA SABIN, 34/2 VIA SABIN, 34 / 2
28 Castagna Attilio VIA SABIN, 34/2 VIA SABIN, 34 / 2
31 Limone Maria VIA TRAVERSETOLO, 2/A VIA TRAVERSETOLO, 2 / A
33 Derosa Valeria VIA SABIN, 34/2 VIA SABIN, 34 / 2
37 Bianchi Emilio VIA SABIN, 34/2 VIA SABIN, 34 / 2
48 Spiriano Luisa VIA SABIN 34/2 VIA SABIN 34 / 2
49 Mongelli Natalina VIA SABIN, 34/2 VIA SABIN, 34 / 2
53 Dinescu Vincenza VIA SABIN 34/2 VIA SABIN 34 / 2
56 Di Bartolomeo Onorino VIA TRAVERSETOLO 2/A VIA TRAVERSETOLO 2 / A
... ... ... ... ...

Aggiungi uno spazio prima e dopo la barra '/' che separa porzioni di un indirizzo ma aggiungi anche ub 'nr' (numero) dopo la virgola che separa il nome della via dal numero civico

Per risolvere questa richiesta occorre nidificare la funzione REPLACE(), come è stato fatto nel secondo esempio teorico.

esempio pratico 2
1
2
3
4
5
6
7
8
<?php
$Query 
"
SELECT id, cognome, nome, indirizzo , 
replace( replace( indirizzo, '/', ' / ' ) , ',', ' nr ' ) AS newInd 
FROM sql_agenda
WHERE indirizzo LIKE '%/%'
"
;
?>
25 record trovati
15 record visualizzati
id cognome nome indirizzo newInd
2 Rizzi Carlo VIA SABIN, 34/2 VIA SABIN nr 34 / 2
5 Scicchitano Andrea VIA SABIN, 34/2 VIA SABIN nr 34 / 2
8 Pasotti Alessio VIA SABIN, 34/2 VIA SABIN nr 34 / 2
9 Calvi Giovanni VIA SABIN, 34/2 VIA SABIN nr 34 / 2
10 Poggi Giuseppe VIA SABIN, 34/2 VIA SABIN nr 34 / 2
17 Bazzotti Pietro VIA SABIN, 34/2 VIA SABIN nr 34 / 2
20 Traina Giovanni VIA SABIN, 34/2 VIA SABIN nr 34 / 2
28 Castagna Attilio VIA SABIN, 34/2 VIA SABIN nr 34 / 2
31 Limone Maria VIA TRAVERSETOLO, 2/A VIA TRAVERSETOLO nr 2 / A
33 Derosa Valeria VIA SABIN, 34/2 VIA SABIN nr 34 / 2
37 Bianchi Emilio VIA SABIN, 34/2 VIA SABIN nr 34 / 2
48 Spiriano Luisa VIA SABIN 34/2 VIA SABIN 34 / 2
49 Mongelli Natalina VIA SABIN, 34/2 VIA SABIN nr 34 / 2
53 Dinescu Vincenza VIA SABIN 34/2 VIA SABIN 34 / 2
56 Di Bartolomeo Onorino VIA TRAVERSETOLO 2/A VIA TRAVERSETOLO 2 / A
... ... ... ... ...

Ricerca per numero telefonico

A volte può capitare di dover cercare un contatto per telefono. Purtroppo il numero di telefono non sempre ha un formato standard e, se ricordiamo solo alcune cifre, non sempre ricordiamo se la sequenza di cifre è separata da un qualche carattere separatore, come visibile in questo frammento di tabella

1
2
3
4
5
<?php
$Query 
"SELECT id, cognome, telefono
FROM sql_agenda 
"
;
?>
103 record trovati
15 record visualizzati
id cognome telefono
1 Migliavacca 084 41655
2 Rizzi 07 9940508
3 Liberali 036 348719
4 Di Maggio 051 18752
5 Scicchitano 07 74891
6 Edelvisi 079 89428
7 Gerardini 012 164848
8 Pasotti 05 9552713
9 Calvi 044 5602773
10 Poggi 08 0640120
11 Curti 027 42781
12 Borsotti 09 379786
13 Franchinotti 062 8880
14 Pischedda 07 628585
15 Maini 02 6638
... ... ...

Togliendo gli spazi ed altri eventuali caratteri separatori è possibile eseguire il controllo solo sulle vere cifre che compongono il numero. Questa operazione di pulizia viene effettuata usando la funzione REPLACE(). Se necessario è possibile usare anche più funzioni REPLACE() nidificate come mostrato più sopra con l'esempio 2.

Cerca gli utenti che hanno una determinata sequenza di numeri

Ricerca di numeri telefonici
1
2
3
4
5
6
7
8
9
<?php
//    la sequenza dei numeri da cercare è .... 79
$Query "
SELECT id, cognome, telefono, 
replace( replace( replace(telefono,' ', ''), '-', ''), '/', '') AS tel_pulito
FROM sql_agenda
WHERE replace( replace( replace(telefono,' ', ''), '-', ''), '/', '') LIKE '%79%' 
"
;
?>
18 record trovati
15 record visualizzati
id cognome telefono tel_pulito
2 Rizzi 07 9940508 079940508
6 Edelvisi 079 89428 07989428
12 Borsotti 09 379786 09379786
19 Dionisio 06 0798 060798
23 Poggi 05 7983 057983
26 Branda 06 0798 060798
30 Carribi 05 7983 057983
38 Zeno 01 3279 013279
43 Cecire 047 9808 0479808
51 De Paula 09 379786 09379786
57 Helvetia 05 7983 057983
60 Zerlenga 06 0798 060798
64 Cerquera 05 7983 057983
72 Cancellieri 01 3279 013279
77 Baroni 047 9808044 0479808044
... ... ... ...

Come rendere la funzione MYSQL REPLACE case-insensitive

Per quanto abbia cercato ho trovato solo questo metodo.

Sostituire la parola Funzione con la parola evidenziata <strong>Funzione</strong>

esempio 1
1
2
3
4
5
6
SELECT body, 
REPLACE( body, LOWER('Funzione'), '<strong>Funzione</strong>')
AS replaced 
FROM sql_articoli
WHERE id in (4, 6, 29)
3 record letti
body replaced
La funzione time() restituisce l'attuale UNIX timestamp cioè l'ora corrente misurato in numero di secondi dalla Unix Epoch. La Funzione time() restituisce l'attuale UNIX timestamp cioè l'ora corrente misurato in numero di secondi dalla Unix Epoch.
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(). 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().
Il numero del campo in cui CERCARE i dati ci viene fornito dalla proprietà ListIndex della ComboBox aumentata di una unità. Occorre effettuare questo calcolo perchè la ListIndex è a base 0 (zero), mentre la matrice dei campi è stata creata a base 1 Trovato il campo da cui prelevare i dati da inserire nella ComboBox2, scorriamo la matrice Matrice leggendono solo i valori relativi a quel campo. Il numero del campo in cui CERCARE i dati ci viene fornito dalla proprietà ListIndex della ComboBox aumentata di una unità. Occorre effettuare questo calcolo perchè la ListIndex è a base 0 (zero), mentre la matrice dei campi è stata creata a base 1 Trovato il campo da cui prelevare i dati da inserire nella ComboBox2, scorriamo la matrice Matrice leggendono solo i valori relativi a quel campo.

 

 



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