首页 > 解决方案 > 文字日期时间为 yyyy-mm-dd 引发异常

问题描述

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

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

返回

Msg 242, Level 16, State 3, Line 3 La conversión del tipo de datos varchar en datetime produjo un valor fuera de intervalo。

我必须以西班牙语格式编写这些日期时间。这工作正常:

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

我不应该同时使用西班牙语和 yyyy-mm-dd 格式吗?我不想使用西班牙语格式,因为新客户可以使用具有不同区域设置的相同数据库。

我对日期文字没有任何问题,只有日期时间。这适用于西班牙语和 yyyy-mm-dd 格式。

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

谢谢你。

标签: sql-serversql-server-2017

解决方案


yyyy-MM-dd在 SQL Server 中不是明确的。使用yyyyMMddyyyy-MM-ddThh:mm:ss.nnnnnnn。如果您不是美国 SQL Server(愚蠢地)读取yyyy-MM-ddyyyy-dd-MM数据日期和时间数据类型。根据您的错误,您不是美国人,因此是错误。

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

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


推荐阅读