sql >> Database >  >> RDS >> Sqlserver

Datumconversie en cultuur:verschil tussen DATE en DATETIME

De ISO-8601 voor DATETIME (het oudere type) is op de een of andere manier "kapot" of "aangepast" (afhankelijk van of je het als een bug of een functie ziet) - je moet YYYYMMDD gebruiken (zonder eventuele streepjes) om het te laten werken, ongeacht de taalinstellingen.

Voor DATE of de DATETIME2(n) datatypes, dit is opgelost en het "juiste" ISO-8601 formaat YYYY-MM-DD wordt altijd correct geïnterpreteerd.

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

Het is een eigenaardigheid van de DATETIME typ (en niet de enige ....) - registreer het gewoon, weet het - en ga verder (wat betekent:gebruik DATETIME niet meer - gebruik DATE of DATETIME2(n) in plaats daarvan - veel fijner om mee te werken!) :-)



  1. Hernoem een ​​door de gebruiker gedefinieerd gegevenstype in SQL Server (T-SQL)

  2. AWS RDS:"SQLSTATE [22001] - Gegevens te lang voor kolom" met MariaDB 10.2

  3. Hoe MariaDB Database in Debian 10 te installeren

  4. SELECT DISTINCT negeert verschillende gevallen