View Full Version : Numeri telefonici in sql ....
Salve a tutti!
Sto realizzando una basi di dati che contiene dei numeri telefonici.
Andando ad inserire i numeri mi sono accorto che lo zero iniziale dei numeri fissi non me lo memorizza,dato che il campo l'ho dichiarato come NUMERIC(10,0).Esiste per caso un tipo di campo particolare per i numeri telefonici??
Sapete per caso dirmi come posso risolvere questo piccolo inconveniente???
Grazie a tutti per eventuali risposte
:->
A mio avviso l'unico modo è mettere i numeri in un campo varchar, così non ti perde niente.
Altre soluzioni stanno alla fantasia (ad es. aggiungi un campo numerico chiamato ZERI_INIZIALI e ci scrivi il numero di zeri che devono andare davanti al numero, 0 se non ce ne sono).
anonimizzato
14-01-2006, 09:14
Salve a tutti!
Sto realizzando una basi di dati che contiene dei numeri telefonici.
Andando ad inserire i numeri mi sono accorto che lo zero iniziale dei numeri fissi non me lo memorizza,dato che il campo l'ho dichiarato come NUMERIC(10,0).Esiste per caso un tipo di campo particolare per i numeri telefonici??
Sapete per caso dirmi come posso risolvere questo piccolo inconveniente???
Grazie a tutti per eventuali risposte
:->
I numeri telefonici sono in realtà delle stringhe a ben vedere e non veri e propri numeri, il consiglio è quindi di memorizzarli come se fosse comune testo in un campo varchar
A mio avviso l'unico modo è mettere i numeri in un campo varchar, così non ti perde niente.
Altre soluzioni stanno alla fantasia (ad es. aggiungi un campo numerico chiamato ZERI_INIZIALI e ci scrivi il numero di zeri che devono andare davanti al numero, 0 se non ce ne sono).
Scusa pinok ma non ho ben compreso quello che volevi dire.
Intendi dire di creare un dominio contenente tutti gli zeri e ogni volta creare una procedura che me lo richiama????
Credo che mi convenga il consiglio dato da entrambi,renderlo di tipo varchar...
Grazie a tutti
*zodiacus*
14-01-2006, 13:23
Ti conviene dichiararlo come varchar. Alla fine non sono veri e propri numeri e con lo 0 davanti diviene un problema ;)
Poi in fondo non ti cambia nulla metterlo come campo testo oppure hai problemi per le query?
Scusa pinok ma non ho ben compreso quello che volevi dire.
Intendi dire di creare un dominio contenente tutti gli zeri e ogni volta creare una procedura che me lo richiama????
Credo che mi convenga il consiglio dato da entrambi,renderlo di tipo varchar...
Grazie a tutti
Intendo che se nel DB hai un campo NUMERO di tipo long (o big int), aggiungi un campo ZERI di tipo tiny int (o byte, tanto conterrà valori non più grandi di 10) in cui scrivi gli zeri che verrebbero persi davanti al numero.
Esempio: hai un numero 010-1234567, ora avresti nel DB
NUMERO=101234567 (il primo zero è perso)
se aggiungi il campo ZERI hai
NUMERO=101234567 (lo stesso)
ZERI=1 (il numero di zeri che dovrai aggiungere davanti al numero quando ti servirà).
Se fosse un numero 00324567 avresti
NUMERO=324567
ZERI=2
e infine, per 3381234567
NUMERO=3381234567
ZERI=0
Puoi usare il varchar come ti avevo già detto, dipende dall'applicazione e dalla quantità di dati che ci metti.
Se non erro il varchar (almeno in mysql) occupa una dimensione pari alla dimensione del contenuto +1 (un tipico numero di cell italiano, compreso di prefisso, è di circa 10 cifre, quindi occupa 10bytes+1).
Se usi un long, mi pare siano 8 bytes, +1 per il numero degli zeri, quindi 9 bytes. Risparmi circa 2 bytes a numero, ma se metti anche il prefisso internazionale risparmi fino a 6 bytes a numero.
In più dovrebbe essere molto più veloce la ricerca per numeri che non per stringhe.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.