Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server将2016年12月1日转换为日期_Sql_Sql Server_Tsql_Date_Sql Convert - Fatal编程技术网

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 使用特定于文化的日期/时间格式是非常危险的,使用特定于语言和文化的格式更糟糕 如果可能将日期/时间值存储在适当的类型中 在我的(德语)系统中,由于“十二月”,即德国的“

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

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