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

Conversione della data e impostazioni cultura:differenza tra DATE e DATETIME

L'ISO-8601 per DATETIME (il tipo precedente) è in qualche modo "rotto" o "adattato" (a seconda che lo consideri un bug o una funzionalità) - devi usare YYYYMMDD (senza eventuali trattini) per farlo funzionare indipendentemente dalle impostazioni della lingua.

Per DATE o il DATETIME2(n) tipi di dati, questo è stato corretto e il formato ISO-8601 "corretto" YYYY-MM-DD sarà sempre interpretato correttamente.

-- OK because of "adapted" ISO-8601
SET LANGUAGE GERMAN;
DECLARE @dt DATETIME='20170113'; 

SELECT @dt;

SELECT CAST('20170113' AS DATETIME);
SELECT CONVERT(DATETIME, '20170113'); 

-- OK because of DATETIME2(n)
SET LANGUAGE GERMAN;
DECLARE @dt2 DATETIME2(0) = '2017-01-13'; 

SELECT @dt2;

SELECT CAST('2017-01-13' AS DATETIME2(0));
SELECT CONVERT(DATETIME2(0), '2017-01-13'); 

È una stranezza del DATETIME digita (e non l'unico....) - registrati, conoscilo - e vai avanti (significato:non usare DATETIME più - usa DATE o DATETIME2(n) invece - molto più bello lavorare con!) :-)