Sql access e date

lunedì 28 gennaio 2008 - 18.49

shark986 Profilo | Junior Member

Per la serie "a volte tornano.." Eccomi qui a dar ancora fastidio a voi esperti!!

Ho un db access che stò utilizzando in vb6.
Il problema che non riesco a risolvere è legato all'utilizzo delle date (e dei suoi formati) col db access: ho trovato che per scegliere un formato posso utilizzare la funzione sql FORMAT(valore, "formato"), mi chiedo però quando usarla!! Nell'inserimento? Nell'esecuzione di query di selezione (e dove: nella sezione SELECT o in quella WHERE)?

Ho fatto qualche test e i risultati mi lasciano più perplesso di quanto non lo sia di mio!!
Ho inserito un pò di record nella tabella Assenze e fatto qualche prova creando query nel file access:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Restituisce le date che mi aspetto 02/01/2008 (2 febbraio) 03/01/2008 (3 gennaio)...
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Invece non restituiscono nulla...
Ok.. Il formato standard per le date usato dai dbms è mm/dd/yyyy.. Allora inserendo record in sql come caspita devo formattarle le date??

Credo che a questo punto serva utilizzare Format solo nella SELECT per essere sicuri del formato visualizzato, e dopo utilizzare nelle query di inserimento/nella sezione WHERE delle query di selezione il formato mm/dd/yyyy...

Cosa ne dite?!... Spero possiate darmi qualche delucidazione in merito!!
Grazie a tutti in anticipo!
I computer sanno contare solo da 0 a 1, il resto è illusione...

lbenaglia Profilo | Guru

>SELECT Format(AssenteA,"dd/mm/yyyy") FROM Assenze WHERE AssenteA
>= #03/01/2008#;
>SELECT Format(AssenteA,"dd/mm/yyyy") FROM Assenze WHERE AssenteA
>= Format(#03/01/2008#,"dd/mm/yyyy");
>Invece non restituiscono nulla...
>Ok.. Il formato standard per le date usato dai dbms è mm/dd/yyyy..
>Allora inserendo record in sql come caspita devo formattarle
>le date??

Ciao Nicola,

Internamente le date non sono registrate come stringhe formattate ma come numeri interi.
Ad esempio in SQL Server il data type datetime memorizza le informazioni di data e ora in una coppia di interi di 4 bytes: il primo per memorizzare il numero di giorni a partire dal 01 gennaio 1900 ed il secondo i ms successivi alla mezzanotte con una accuratezza di 3,33 ms.

Quando applichi la funzione Format su una colonna della SELECT list non fai altro che dire ad Access di convertire quei numeri in una stringa, in base al formato specificato come argomento.
Access è in grado di eseguire implicitamente anche la conversione contraria (da stringa a data), a patto di utilizzare uno dei formati riconosciuti.
In questo post riportavo un piccolo esempio VB Script che testava alcuni formati:
http://groups.google.it/group/it.comp.www.asp/msg/3fb0d25f45594522

La documentazione di Access riporta come formato universale #MM/DD/YYYY# ma come vedi ne ho scovato un altro (ricordo che Giorgio Rancati ne aveva identificato un terzo).

>Credo che a questo punto serva utilizzare Format solo nella SELECT
>per essere sicuri del formato visualizzato, e dopo utilizzare
>nelle query di inserimento/nella sezione WHERE delle query di
>selezione il formato mm/dd/yyyy...
Generalmente il compito di localizzare date, valute, separatori decimali e delle migliaia è delegato all'applicazione client in base alle Regional Options impostate sul PC.
Se per qualunque altro motivo si rende necessaria una formattazione lato database, è corretto utilizzare la funzione Format nella SELECT list, mentre un eventuale filtro nella clausola WHERE andrà specificato nel formato #MM/DD/YYYY#.

Una soluzione ancora migliore consiste nell'isolare tutte le SELECT in oggetti Query (evetualmente parametrici) dato che i comandi vengono precompilati ed eseguiti in modo molto più efficiente grazie alla tecnologia Rushmore. Ti segnalo un piccolo esempio:
http://groups.google.it/group/it.comp.www.asp/msg/aec990d4b4eb2e85

>Grazie a tutti in anticipo!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5