Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile archiviare determinati formati di data e ora in SQL Server

SQL Server non archivia un DateTime in qualsiasi formato di stringa:viene memorizzato come un valore numerico di 8 byte.

Le varie impostazioni (lingua, formato data) influenzano solo il modo in cui il DateTime viene mostrato in SQL Server Management Studio o come viene analizzato quando si tenta di convertire una stringa in un DateTime .

Esistono molti formati supportati da SQL Server:vedere la MSDN Books Online su CAST e CONVERTI . La maggior parte di questi formati sono dipendenti su quali impostazioni hai - quindi, queste impostazioni potrebbero funzionare alcune volte - e talvolta no.

Il modo per risolvere questo problema è utilizzare il formato data ISO-8601 supportato da SQL Server:questo formato funziona sempre - indipendentemente dalla lingua di SQL Server e dalle impostazioni del formato della data.

Il formato ISO-8601 è supportato da SQL Server è disponibile in due versioni:

  • YYYYMMDD solo per le date (nessuna parte dell'ora) - nota qui:nessun trattino! , è molto importante! YYYY-MM-DD è NON indipendente dalle impostazioni del formato della data nel tuo SQL Server e NON lavora in tutte le situazioni!

oppure:

  • YYYY-MM-DDTHH:MM:SS per date e orari - nota qui:questo formato ha trattini.

Questo è valido per SQL Server 2000 e versioni successive.

Se utilizzi SQL Server 2008 e DATE tipo di dati (solo DATE - non DATETIME !), allora puoi infatti utilizzare anche il YYYY-MM-DD format e funzionerà anche con qualsiasi impostazione nel tuo SQL Server.

Non chiedermi perché l'intero argomento è così complicato e un po' confuso:è proprio così. Ma con il YYYYMMDD formato, dovresti andare bene per qualsiasi versione di SQL Server e per qualsiasi impostazione di lingua e formato della data nel tuo SQL Server.