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

SQL Server datum Závisí na formátu uživatele?

Pokud potřebujete určit datum a čas pomocí řetězců, měli byste použít trezor , jazykově nezávislý formát.

V SQL Serveru je to formát ISO-8601 (mírně přizpůsobený) a podporuje v zásadě dva bezpečné formáty pro DATETIME které vždy fungují – bez ohledu na váš jazyk, oblast a nastavení formátu data:

YYYYMMDD              (e.g. 20121231  for 31st of December 2012)  if you need date only

YYYY-MM-DDTHH:mm:ss   (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)

Poznámka:

  • první formát pouze pro datum nemá žádné pomlčky nebo oddělovače!

  • druhý formát obsahuje pomlčky pro datum (lze je také vynechat) a je tam pevné T jako oddělovač mezi datem a časovou částí řetězce

Aktualizace: podle vašeho posledního komentáře (o různých výchozích jazycích pro dva uživatele) - zkuste toto:

-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)   

Funguje dobře...

-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)

Toto se pokouší interpretovat řetězec jako 11. den 30. měsíce roku 2012 a očividně to selže....



  1. připravené prohlášení s Eloquent ORM / laravel

  2. Dotaz běží rychle, ale běží pomalu v uložené proceduře

  3. hibernace se částečně aktualizuje při analýze entity pomocí json

  4. doktrína - získat další a předchozí záznam