Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 文字日期时间作为yyyy mm dd引发异常_Sql Server_Sql Server 2017 - Fatal编程技术网

Sql server 文字日期时间作为yyyy mm dd引发异常

Sql server 文字日期时间作为yyyy mm dd引发异常,sql-server,sql-server-2017,Sql Server,Sql Server 2017,我有一个配置了西班牙语设置的数据库,当我使用文字日期时间作为yyyy-mm-dd时,我得到一个varchar超出范围的转换错误 select convert(datetime, '2014-11-19') 返回 味精242,第16层,第3州,第3行La Conversion del tipo de datos varchar是一个日期时间生产商 我必须用西班牙语写那些日期时间。这很好: select convert(datetime, '2014-11-19') 难道我不能同时使用西班牙

我有一个配置了西班牙语设置的数据库,当我使用文字日期时间作为yyyy-mm-dd时,我得到一个varchar超出范围的转换错误

select convert(datetime, '2014-11-19') 
返回

味精242,第16层,第3州,第3行La Conversion del tipo de datos varchar是一个日期时间生产商

我必须用西班牙语写那些日期时间。这很好:

select convert(datetime, '2014-11-19') 
难道我不能同时使用西班牙语和yyyy-mm-dd格式吗?。我不想使用西班牙语格式,因为一个新的客户可以使用同一个数据库和不同的区域设置

我对日期文字没有任何问题,只对日期时间有问题。这在西班牙语和yyyy-mm-dd格式中都可以正常工作

select convert(date, '2014-11-19'), 
       convert(date, '19-11-2014') 

谢谢。

yyyy-MM-dd
在SQL Server中并不明确。使用
yyyyMMdd
yyyy-MM-ddThh:MM:ss.nnnnnnn
。如果您不是美国人,SQL Server(愚蠢地)将旧数据日期和时间数据类型的
yyyy-MM-dd
读取为
yyy-dd-MM
。基于你的错误,你不是美国人,因此你犯了错误

注意:
yyyy-MM-dd
对于较新的日期和时间数据类型是明确的。微软修复了这个“功能”


或者,您可以提供样式代码以
CONVERT
指定格式。在本例中,这将是样式23:
CONVERT(日期时间,'2014-11-19',23)
yyy-MM-dd
在SQL Server中并不明确。使用
yyyyMMdd
yyyy-MM-ddThh:MM:ss.nnnnnnn
。如果您不是美国人,SQL Server(愚蠢地)将旧数据日期和时间数据类型的
yyyy-MM-dd
读取为
yyy-dd-MM
。基于你的错误,你不是美国人,因此你犯了错误

注意:
yyyy-MM-dd
对于较新的日期和时间数据类型是明确的。微软修复了这个“功能”


或者,您可以提供样式代码以
CONVERT
指定格式。在本例中,这将是样式23:
CONVERT(日期时间,'2014-11-19',23)
datetime
或多或少是一种遗留类型,这是它的一个怪癖。它在
yyyy-MM-dd
表单中处理日期文字的方式受参数影响

真正的解决方案是首先不使用日期文字。改为使用具有适当类型的参数,在本例中为
date

如果必须使用日期文字,请使用
yyyyymmdd
。避免使用
datetime
,而是使用
date
datetime2

datetime
或多或少是一种遗留类型,这是它的一个怪癖。它在
yyyy-MM-dd
表单中处理日期文字的方式受参数影响

真正的解决方案是首先不使用日期文字。改为使用具有适当类型的参数,在本例中为
date

如果必须使用日期文字,请使用
yyyyymmdd
。避免使用
datetime
,而是使用
date
datetime2

添加
yyyy-MM-dd
文字在
日期的情况下不含糊<代码>选择转换(日期“2014-11-19”)
返回正确的值,而不考虑
DATEFORMAT
设置。这就是我在旧数据类型@DanGuzman中提到的原因。谢谢。我将使用yyyymmdd。@Larnu,我在您的初始答案中没有看到这一点。补充说,
yyyy-MM-dd
文字在
日期的情况下并不含糊<代码>选择转换(日期“2014-11-19”)
返回正确的值,而不考虑
DATEFORMAT
设置。这就是我在旧数据类型@DanGuzman中提到的原因。谢谢。我将使用yyyymmdd。@Larnu,我在您的初始答案中没有看到。使用datetime2格式适用于欧洲日期-如果您确实需要在datetime中使用它,您可以进行双重转换,即选择convert(datetime,(convert(datetime2,'2014-11-19')),使用datetime2格式适用于欧洲日期-如果您确实需要在datetime中使用它,您可以对其进行双重转换,即选择转换(日期时间,(转换(日期时间2,'2014-11-19'))