2011-11-09 11 views
6

Il mio database contiene un elenco di numeri di telefono di tipo varchar. Numero di telefono può essere in uno dei seguenti formatiÈ necessario un aiuto per scrivere la query di ricerca

12323232323 
1-232-323 2323 
232-323-2323 
2323232323 

Al posto del simbolo ci possono essere (),. o space E se cerco 12.323.232,323 mila, 1-232-323 2323, 232-323-2323 o 2323232323 dovrebbe mostrare tutti questi risultati. Ho bisogno di scrivere una query per questo.

+0

Hai guardato [funzioni di stringa MySQL] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html)? –

+0

Hai davvero bisogno di salvare la formattazione dei numeri di telefono? Hai considerato di memorizzare i numeri di telefono in un unico formato e di riformattarli quando li visualizzi in base alle impostazioni di localizzazione dell'utente corrente? –

+1

@Phoenix Concordo sul fatto che non si voglia archiviare il formato con il numero ma non penso che abbia senso formattare in base alla locale dell'utente dire un numero statunitense in un formato tedesco. Se la localizzazione era un problema, probabilmente dovresti memorizzare il codice del paese e quindi formattare il numero in base a quel codice. –

risposta

10

Penso che non sia efficiente farlo in tempo reale, propongo due opzioni.

  1. pulire i dati, quindi ci sarà un solo formato.

  2. aggiungi un'altra colonna che contiene i dati puliti, quindi quando cerchi, cerchi questa colonna, quando visualizzi puoi visualizzare i vari dati di formato.

+0

Esattamente questo. +1 –

2

Sono d'accordo con James, ma se si ha realmente bisogno di cercare il database come è, forse MySQL di REPLACE operatore ti porterà dove devi andare. Qualcosa di simile

select * from mytable where replace(crazynumber,'-','')='23232323'; 
+0

funziona bene per sostituire un carattere singolo. È possibile sostituire una serie di stringhe? Nel mio caso potrebbero esserci '(),. o spazio' invece di '-'. – Juice

+0

ho provato con array come questo "" dove sostituire (c.customers_telephone, "". $ Chars. "',' ') ='". $ solo numeri. "'"; 'e sto ottenendo che la query venga eseguita in questo modo' where replace (c.customers_telephone,' Array ',' ') =' 2323232323'' – Juice

+2

Nota che se segui questo percorso, non puoi usare un indice per velocizzare la tua query; costringerai MySQL a eseguire una scansione completa della tabella per OGNI query. Ti consiglio vivamente di disinfettare i tuoi dati. –

Problemi correlati