sql >> Databáze >  >> RDS >> Sqlserver

Převod data a kultura:Rozdíl mezi DATE a DATETIME

ISO-8601 pro DATETIME (starší typ) je nějak "rozbitý" nebo "přizpůsobený" (podle toho, zda se na to díváte jako na chybu nebo funkci) - musíte použít YYYYMMDD (bez jakékoli pomlčky), aby fungoval bez ohledu na nastavení jazyka.

Pro DATE nebo DATETIME2(n) datové typy, toto bylo opraveno a "správný" formát ISO-8601 YYYY-MM-DD bude vždy správně interpretováno.

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

Je to zvláštnost DATETIME zadejte (a ne jediný....) - stačí jej zaregistrovat, vědět o něm - a jít dál (to znamená:nepoužívejte DATETIME dále - použijte DATE nebo DATETIME2(n) místo toho - mnohem hezčí pracovat!) :-)



  1. Budoucnost Postgres-XL

  2. Obnovení smazaného 'root' uživatele a hesla pro MySQL

  3. Záleží na pořadí sloupců v klauzuli WHERE?

  4. Jak vytvořit bezpečný příkaz připravený mysql v php?