SQL Server e il formato datetime ISO 8601 (altrimenti: il formato YYYYMMDD è uguale a YYYY-MM-DD?)

SQL Server supporta il formato ISO 8601 per la specifica dei valori di data e ora.

L'utilità di utilizzare tale formato è che l'interpretazione della data espressa è indipendente dalla localizzazione (come detto negli articoli precedenti, in cui viene usato il formato ISO yyyymmdd). L'elenco completo dello standard lo si trova qui:

http://www.mcs.vuw.ac.nz/technical/software/SGML/doc/iso8601/ISO8601.html

e da una lettura dello stesso si può dedurre che i pattern yyyymmdd e yyyy-mm-dd dovrebbero essere trattati in modo identico.

Per SQL Server, però, il formato ISO è definito solamente dal seguente pattern:

yyyy-mm-ddThh:mm:ss[.nnn]

Questo significa che pensare che i formati yyyy-mm-dd e yyyymmdd siano identici, quando si parla di SQL Server, è errato.

I BOL sono chiari (ma non a sufficienza):

"To use the ISO 8601 format, you must specify each element in the format. This also includes the punctuation marks that are shown in the format."

Tradotto in pratica, l'esempio che dimostra il funzionamento dei vari formati è questo:

SET DATEFORMAT DMY
SELECT CAST('20060501' as datetime) -- Corretto: 1 Maggio 2006 
SELECT CAST('2006-05-01T00:00:00' as datetime) -- Corretto: 1 Maggio 2006
SELECT CAST('2006-05-01' as datetime) -- Sbagliato: 5 Gennaio 2006
SELECT CAST('2006-05-01 00:00:00' as datetime) -- Sbagliato: 5 Gennaio 2006


L'utilizzo del SET DATEFORMAT è necessario per dimostrare l'errore, in quanto, se si usasse invece il formato MDY (quello inglese per intenderci), l'errore non si presenterebbe e la data verrebbe riconosciuta correttamente anche in presenza di una stringa che non rappresenta un formato ISO riconosciuto da SQL Server.

Print | posted on sabato 6 maggio 2006 17:03

Feedback

# I formati ISO YYYYMMDD, YYYY-MM-DD e Sql Server

Left by .NET Tools Blog at 06/05/2006 17:15
Gravatar

# Gestire date ed orari con SQL Server 2000

Left by .NET Tools Blog at 25/10/2006 00:40
Gravatar

# Gestire date ed orari con SQL Server

Left by The Impedance Mismatch at 21/05/2007 12:11
Gravatar Per chiudere il cerchio sull'argomento "Date e SQL Server" è bene, anzi è obbligatorio, parlare anche
Comments have been closed on this topic.

Copyright © Davide Mauri

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski