Uno dei problemi che più affligge chi si avvicina a SQL Server è l'utilizzo delle date.
Il campo datetime di SQL (oppure il più piccolo smalldatetime) sembra che a volte si comporti in modo misterioso e non sempre sembra essere chiaro come interpreta i valori che gli immettiamo: il formato è giorno-mese-anno, oppure mese-giorno-anno, oppure altro ancora?
Per evitare qualsiasi problema di questo tipo è sufficiente inserire e pensare alle date utilizzando il formato ISO annomesegiorno, senza separatori. Oggi, quindi, si scriverebbe come:
20050117
In questo modo, indipendentemente dalle impostazioni di localizzazione, Sql Server interpreterà correttamente anno, mese e giorno.
Spero che questo riesca a chiarire i dubbi sull'argomento, che ultimamente, sul ng di SQL stanno uscendo spesso. Tale problema, per chi sviluppa utilizzando ADO.NET non è percepito - se si utilizzano correttamente i parametri, ragione in più per farlo - ma è qualcosa che ci si deve abituare a trattare se si scrive anche del codice T-SQL.
Appena ho un'altra manciata di minuti liberi scrivo anche due righe sulla gestione del tempo con SQL, altra questione tipicamente problematica: ogni data inserita prevede, anche se non specificato dall'utente, l'inserimento dei valori relativi ad ora, minuti, secondi e millisecondi. La data sopra riportata, quindi, per SQL Server è
20050117 00:00:00.000
cosa che ovviamente può dare problemi se non se ne tiene conto adeguatamente.