Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [MYSQL] ricerca numeri di telefono

    Ciao,
    a causa di una mia superficialità e, soprattutto, inesperienza iniziale, mi trovo ora con un grosso problema.
    In una rubrica ho dei numeri telefonici registrati in diversi formati:
    0123-45 34 56, oppure 123 45 67 290, oppure 123/1234567
    Quando cerco un numero di telefono ho creato una query di questo genere:
    codice:
    SELECT * FROM agenda 
    WHERE 
    tel_casa LIKE '%234%' 
    OR tel_uff LIKE '%234%' 
    OR cellulare LIKE '%234%' 
    ORDER BY gruppo, nominativo
    E' ovvio che se nel numero telefonico le cifre "234" sono senza caratteri separatori, il record mi viene trovato.
    Però se le cifre sono interrotte da un carattere separatore, è ovvio che il record non mi viene restituito. Vedi il caso degli esempi che ho postato qui sopra:
    0123-45 34 56 (non viene restituito)
    123 45 67 290 (non viene restituito)
    123/1234567 (questo mi viene restituito)

    Quel che chiedo ora: c'è una possibilità di eliminare i tre possibili caratteri separatori (spazio, trattino, barra inclinata) nella query di ricerca?

    Grazie per la possibile soluzione.

  2. #2
    probabilmente con una regular expression che lasci passare solo i caratteri numerici - ma non conosco così bene mysql

  3. #3
    Ti ringrazio optime.
    quella delle regular expression sarebbe una soluzione, purtroppo non le conosco bene e non saprei come impostarle.
    Spero che passi qualcun altro con un esempio pratico.


  4. #4
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    puoi fare anche un più semplice replace (triplo).
    O un miglior trigger che normalizzi il formato al momento della scrittura.
    O la stessa cosa lato applicazione.

  5. #5
    con le replace entri in un loop infinito, perché la fantasia della gente non ha limiti. serve una regex (o una function) che lasci passare solo i numerici

  6. #6
    Sì, infatti il suggerimento di franzauker2.0 non può essere applicato in una query perchè la str_replace agirebbe sul nome del campo e non dei valori ad esso associati (WHERE " . str_replace(" ", "", str_replace("-", "", str_replace ("/", "", "tel_casa"))) . " LIKE '" . $find . "%').
    Per questo penso che la strada di optime sia la migliore strada da seguire. Purtroppo sono a corto di idee e non so come applicare una regex in una query.


  7. #7
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Vabbè
    codice:
    select telefono from qualcosa where telefono regexp '[[:digit:]]';

  8. #8
    Bene, cominiciamo ad avvicinarci alla soluzione, spero e te ne ringrazio.
    Nel mio caso, cercando un numero che contiene le cifre "123" (41/2345687, 65/12 34 56, 71-23 45 674)
    debbo fare
    codice:
    select telefono from qualcosa where telefono regexp '[^ -/]' LIKE "%123%";
    per escludere eventuali spazi, trattini, barra inclinata?
    oppure
    codice:
    select telefono from qualcosa where telefono regexp '[0-9]' LIKE "%123%";
    per includere solo caratteri numerici?
    oppure debbo fare
    codice:
    select telefono from qualcosa where telefono regexp '[123]';
    per cercare qualsiasi valore in cui "123" siano i tre numeri consecutivi che sto cercando a parte i caratteri spazi, trattini, barra inclinata?

    Comunque io dovrei fare una "SELECT * FROM ............... "

  9. #9
    Ah, forse dovrei fare:
    codice:
    select * from qualcosa where telefono regexp '[1?2?3]';
    ????

  10. #10
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Sono un po' confuso di cosa ti turba.
    Comunque l'equivalente di LIKE '%234%' in espressione regolare mysql è
    regexp '234'

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.