问题描述
我正在使用此版本的sql Server
/**
* @Groups({"foo"})
*/
private ?Foo duplicatedFrom;
有关语言环境设置的信息
/**
* @Groups({"foo"})
*/
public function getDuplicatedFromId(): ?string
{
return $this->getDuplicatedFrom()->getId();
}
我阅读了参考文件
(来源:https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql?view=sql-server-ver15)
Microsoft sql Server 2019 (RTM-GDR) (KB4517790) - 15.0.2070.41 (X64) Oct 28 2019 19:56:59 copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19041: ) (Hypervisor)
作为参考文件指出,我认为是select @@LANGUAGE;
-- result: us_english
(DECLARE @date DATE = '12/10/05';
DECLARE @datetime DATETIME = @date;
SELECT @date AS '@date',@datetime AS '@datetime';
; 1910年12月5日),但返回的时间是 2005年12月10日。
参考文件有误吗?如何容易理解这些格式?如何理解和记住?
解决方法
首先是第一-None of the Date/Time data types is stored with the display format in SQL Server.
其次,您执行了select @@LANGUAGE;
,然后又回到了us_english
-继续运行
SELECT dateformat
FROM sys.syslanguages
WHERE [Name] = @@LANGUAGE;
您将看到mdy
的结果-这意味着日期值的字符串表示形式的格式为以下之一:
-
[m]m/dd/[yy]yy
-
[m]m-dd-[yy]yy
-
[m]m.dd.[yy]yy
第三,您应该意识到以下事实:在处理SQL Server时,语言设置与登录名的默认语言相关,这意味着不同的登录名可能会有不同的语言符号,当然,可以更改language和/或date format设置-得出结论-
您永远不要依赖语言设置来显示日期/时间字符串。相反,请使用ISO 8601中指定的一种格式,因为这是保证可以正确解释为有效日期/时间值的仅有两种格式,而与语言和日期格式设置无关,而与实际数据类型无关, Even DateTime
这是一个原因why you should never use DateTime
again)。