SQL Server将2016年12月1日转换为日期
如何在SQL Server中将字符串“2016年12月1日”转换为日期类型SQL Server将2016年12月1日转换为日期,sql,sql-server,tsql,date,sql-convert,Sql,Sql Server,Tsql,Date,Sql Convert,如何在SQL Server中将字符串“2016年12月1日”转换为日期类型 CONVERT(date, '01 December 2016', 106) 预期日期结果“2016年12月1日”如果2012+您可以使用格式() 返回 01 Dec 2016 如果2012+您可以使用Format() 返回 01 Dec 2016 使用特定于文化的日期/时间格式是非常危险的,使用特定于语言和文化的格式更糟糕 如果可能将日期/时间值存储在适当的类型中 在我的(德语)系统中,由于“十二月”,即德国的“
CONVERT(date, '01 December 2016', 106)
预期日期结果“2016年12月1日”如果2012+您可以使用格式() 返回
01 Dec 2016
如果2012+您可以使用Format() 返回
01 Dec 2016
使用特定于文化的日期/时间格式是非常危险的,使用特定于语言和文化的格式更糟糕 如果可能将日期/时间值存储在适当的类型中强> 在我的(德语)系统中,由于“十二月”,即德国的“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
永远不要依赖隐式转换:
第三个参数106
告诉SQL Server日期的格式(如何解析)。第一个转换
的目标类型是日期
。这个-现在正确地表示了日期可以再次转换为VARCHAR(11)
,第三个参数是106,现在指定输出格式
要深入了解特定语言的日期部分,可以运行以下查询:
SELECT * FROM sys.syslanguages;
顺便说一句:如果您使用的是SQL Server 2012+,您应该调用John Cappelletti指出的
格式()
,使用特定于区域性的日期/时间格式是非常危险的,使用特定于语言和区域性的格式更糟糕
如果可能将日期/时间值存储在适当的类型中强>
在我的(德语)系统中,由于“十二月”,即德国的“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
永远不要依赖隐式转换:
第三个参数106
告诉SQL Server日期的格式(如何解析)。第一个转换
的目标类型是日期
。这个-现在正确地表示了日期可以再次转换为VARCHAR(11)
,第三个参数是106,现在指定输出格式
要深入了解特定语言的日期部分,可以运行以下查询:
SELECT * FROM sys.syslanguages;
顺便说一句:如果您使用的是SQL Server 2012+您应该调用
FORMAT()
,正如John Cappelletti指出的那样,您的代码是有效的。SQL Server(正确)返回2016-12-01,因为这是返回日期的格式。如果需要不同的格式,请使用带有相应格式参数的convert(varchar())
。或者format()
。您的代码可以正常工作。SQL Server(正确)返回2016-12-01,因为这是返回日期的格式。如果需要不同的格式,请使用带有相应格式参数的convert(varchar())
。或者format()
。像上面那样调用CONVERT
意味着依赖隐式的文化/语言转换。在我的系统中,这会崩溃+1对于上面类似的FORMAT()
调用CONVERT
意味着依赖隐式文化/语言转换。在我的系统中,这会崩溃+1用于格式()
更安全。让我感到羞耻的是,我往往对这些物品相当麻木,甚至更安全。让我感到羞耻的是,我往往对这样的项目相当麻木+1