我有一个配置了西班牙语设置的数据库,当我使用文字日期时间作为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中并不明确。使用yyyyMMdd
或yyyy-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
,而是使用date
或datetime2
。