sql >> Databasteknik >  >> RDS >> Sqlserver

Datumkonvertering och kultur:Skillnaden mellan DATE och DATETIME

ISO-8601 för DATETIME (den äldre typen) är på något sätt "trasig" eller "anpassad" (beroende på om du ser den som en bugg eller funktion) - du måste använda YYYYMMDD (utan några streck) för att få det att fungera oavsett språkinställningarna.

För DATE eller DATETIME2(n) datatyper, detta har åtgärdats och det "korrekta" ISO-8601-formatet YYYY-MM-DD kommer alltid att tolkas korrekt.

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

Det är en egenhet av DATETIME skriv (och inte den enda...) - registrera det, vet om det - och gå vidare (vilket betyder:använd inte DATETIME längre - använd DATE eller DATETIME2(n) istället - mycket trevligare att jobba med!) :-)



  1. Star Trek 3D schackdatamodell

  2. Fulltextsökningar i MySQL:The Good, the Bad and the Ugly

  3. Gör, inte bryta, SQL Server-prestanda

  4. Hur man aktiverar komprimering på en befintlig tabell i SQL Server (T-SQL)