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

Datokonvertering og kultur:Forskellen mellem DATE og DATETIME

ISO-8601 for DATETIME (den ældre type) er på en eller anden måde "brudt" eller "tilpasset" (afhængigt af om du ser på det som en fejl eller en funktion) - du skal bruge YYYYMMDD (uden eventuelle bindestreger) for at få det til at fungere uanset sprogindstillingerne.

For DATE eller DATETIME2(n) datatyper, dette er blevet rettet og det "korrekte" ISO-8601-format YYYY-MM-DD vil altid blive fortolket 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 er et særpræg ved DATETIME skriv (og ikke den eneste...) - bare registrer det, kend til det - og gå videre (betyder:brug ikke DATETIME længere - brug DATE eller DATETIME2(n) i stedet - meget pænere at arbejde med!) :-)



  1. Sådan aktiverer du understøttelse af fremmed nøgle i SQLite

  2. Når du bruger GETDATE() mange steder, er det så bedre at bruge en variabel?

  3. SQL Server:Vedhæft forkert version 661

  4. Forbedring af backend-ydeevne Del 2/3:Brug af databaseindekser