bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Scartare il timestamp da un smalldatetime su SQL Server

Ciao a tutti e ben rientrati dopo la pausa estiva! ;)

Come al solito, al rientro dalle vacanze si risolvono i problemi "semplici", giusto per riprendersi con un po' più di calma dal traumatico ritorno alla realtà! ;D

E anche qui in D'vel le cose non vanno diversamente! :)

Oggi infatti ho sistemato un problema relativo ad una query che, in una applicazione Swing un po' datata che abbiamo in piedi, non funzionava correttamente.

Il problema è semplice: ho un campo di tipo smalldatetime che viene popolato con un default value che è getDate(). Questo, ovviamente, stampa non solo il giorno ma anche l'ora, minuti, secondi e millisecondi all'interno del campo!

Da qui però il problema: quando fate una select su questa tabella e nella where mettete come condizione che la data dev'essere uguale ad un oggetto java.sql.Date che voi gli passate da interfaccia, il simpatico SQL Server 2008 (la mia versione di riferimento su questo cliente..) considera anche la parte del timestamp. Risultato? Nessun record selezionato!

Chiedendo a Google come si potrebbe aggirare il problema, mi sono imbattuto in un simpatico thread su stackoverflow.comche, anche se da un altro punto di vista, affronta il tema.

Da qui la soluzione: anziché utilizzare la data in formato java.sql.Date come stavo fancendo, converto tutto quanto in una stringa e faccio l'uguaglianza, usando questo formato:

select

[campi]

from [tabella]

where 1 = 1

and DATEADD(dd, DATEDIFF(dd, 0,[campo di tipo smalldatetime]), 0) = ?

order by [order by]

Ovviamente al PreparedStatement gli passerò la data in formato String correttamente formattata per il Locale del mio db! ;)

Spero vi possa essere d'aiuto e vi risparmi un po' di tempo!

Ovviamente, se qualcuno ha maggiore esperienza di me su questo topic e ha voglia di dare i suoi 2cent sul problema, ogni commento è più che ben accetto! ;)

Happy coding a tutti e, ancora, ben tornati alla realtà.. :)

Precedente
Commenti
Nessun commento. Vuoi essere il primo.