SQL 服务器转换 2016 年 12 月 1 日至今

SQL Server Convert 01 December 2016 to date

如何将字符串“2016 年 12 月 1 日”转换为 SQL 服务器中的日期类型?

CONVERT(date, '01 December 2016', 106)

预计结果日期“2016 年 12 月 1 日”

如果 2012+ 你可以使用 Format()

Select Format(convert(date,'01 December 2016'),'dd MMM yyyy')

Returns

01 Dec 2016

使用特定于文化的 date/time 格式非常危险,使用特定于语言和文化的格式更糟糕...

如果可能的话以适当的类型存储date/time值!

在我的(德语)系统中,由于 "December",直接转换或转换会中断,在德国是 "Dezember"。看看这个:

SET LANGUAGE English; --try the same with "German"

DECLARE @d VARCHAR(100)='01 December 2016';

SELECT CONVERT(VARCHAR(11),CONVERT(DATE,@d,106),106);

结果

01 Dec 2016

永远不要依赖隐式转换:Call CONVERT with the third parameter in any case!

第三个参数106 告诉SQL 服务器日期的格式(如何解析)。第一个 CONVERTS 的目标类型是 DATE。这 - 现在正确表示! - 日期可以再次转换为 VARCHAR(11),其中 106 作为第三个参数,现在指定 输出格式

要更深入地了解特定于语言的日期部分,您可以运行此查询:

SELECT * FROM sys.syslanguages;

顺便说一句:如果您使用的是 SQL Server 2012+,您应该按照 John Cappelletti

所指出的那样调用 FORMAT()