0

如何在 SQL Server 中将字符串“2016 年 12 月 1 日”转换为日期类型?

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

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

4

2 回答 2

3

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

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

退货

01 Dec 2016
于 2017-04-04T14:09:54.027 回答
1

使用特定于文化的日期/时间格式是非常危险的,使用特定于语言和文化的格式更糟糕......

如果可能的话,以适当的类型存储日期/时间值!

在我的(德国)系统中,由于“十二月”,即德国的“十二月”,直接演员或转换会中断。看看这个:

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

永远不要依赖隐式转换:在任何情况下都使用第三个参数调用!CONVERT

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

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

SELECT * FROM sys.syslanguages;

顺便说一句:如果您使用的是 SQL Server 2012+,您应该调用FORMAT()John Cappelletti 指出的

于 2017-04-04T14:35:45.850 回答