Sql server 文字日期时间作为yyyy mm dd引发异常
我有一个配置了西班牙语设置的数据库,当我使用文字日期时间作为yyyy-mm-dd时,我得到一个varchar超出范围的转换错误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') 难道我不能同时使用西班牙
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'))