以yyyy-mm-dd表示的文字日期时间引发异常



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

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

返回

消息242,级别16,状态3,第3行数据转换瓦查尔在最新的时间里生产了一种价格低廉的intervalo。

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

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中并不明确。使用yyyyMMddyyyy-MM-ddThh:mm:ss.nnnnnnn。如果您不是美国人,则SQL Server(愚蠢地(将yyyy-MM-dd读取为旧数据日期和时间数据类型的yyyy-dd-MM。根据你的错误,你不是美国人,因此就出现了错误。

注意:yyyy-MM-dd对于较新的日期和时间数据类型是明确的。微软修复了";特征">

或者,可以向CONVERT提供样式代码以指定格式。在这种情况下,这将是样式23:CONVERT(date time,'2014-11-19',23)

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

真正的解决方案是而不是首先使用日期文字。请改用具有适当类型的参数,在本例中为date。如果必须使用日期文字,请使用yyyyMMdd。避免使用datetime,而是使用datedatetime2

最新更新