Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Datumsumwandlung und Kultur:Unterschied zwischen DATE und DATETIME

Die ISO-8601 für DATETIME (der ältere Typ) ist irgendwie "kaputt" oder "angepasst" (je nachdem, ob Sie es als Fehler oder Feature betrachten) - Sie müssen YYYYMMDD verwenden (ohne irgendwelche Bindestriche), damit es unabhängig von den Spracheinstellungen funktioniert.

Für DATE oder DATETIME2(n) Datentypen, dies wurde behoben und das "richtige" ISO-8601-Format YYYY-MM-DD wird immer richtig interpretiert.

-- 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'); 

Es ist eine Eigenart des DATETIME eingeben (und nicht der einzige ....) - einfach registrieren, Bescheid wissen - und weitermachen (das heißt:DATETIME nicht verwenden). mehr - verwenden Sie DATE oder DATETIME2(n) stattdessen - viel angenehmer damit zu arbeiten!) :-)