2012-03-24 6 views
13

Ho una tabella con una colonna phone, in cui i dati possono contenere spazi, punti, trattini o segni + tra i numeri. ho bisogno di fare una ricerca con caratteri jolly del genere ignorano tutti quei personaggi, per esempio:Come ignorare i caratteri su MYSQL SELECT LIKE% ...%

  • un record può avere telefono come "+ 123-456 78.90"
  • una query ricerca di "6789" o qualsiasi sequenza completa o incompleta di cifre corrette in ordine dovrebbe riportare quella registrazione.

Purtroppo non riesco a ripulire la tabella originale per rimuovere i caratteri non numerici e fare un semplice SELEZIONA COME% ...%.

MYSQL ha funzioni per sostituire/rimuovere caratteri da stringhe, ma non riesce a trovare un modo per usarli all'interno di una query con un MIlastampato LIKE.

Qualsiasi aiuto sarà molto apprezzato.

+0

Qual è la lingua lato server? PHP? –

+1

Si dice che mysql e Henry stanno parlando di query;) – Martijn

risposta

28

vedo due modi per farlo:

  1. Se si consente solo alcuni caratteri in più di quanto si può preparare una stringa che viene spogliato da questi personaggi extra e si utilizza l'operatore LIKE si farebbe normalmente

    select * from phoneTable where replace(replace(phone, '+', ''), '-', '') LIKE '%123%' 
    

    Naturalmente è necessario ben sostituire le chiamate come il numero di permessi caratteri extra

  2. si utilizza espressioni regolari, diciamo che si sono alla ricerca di modello 123

    select * from phoneTable where phone REGEXP '.*1[^0-9]*2[^0-9]*3' 
    
+0

Una volta aggiunto il '% ..%' alla prima opzione, entrambi eseguono correttamente il lavoro. Molte grazie per il tuo aiuto. – Henry

+0

Hai ragione, ho dimenticato i caratteri jolly e non ho provato a eseguire le query. Risposta corretta – Hari

+1

immagino che la prima opzione sia più veloce –

4

ho avuto lo stesso problema con Numero di prodotto e caratteri indesiderati. La mia soluzione era

SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%'; 
+3

come è diversa questa risposta da quella accettata? – Sp0T