文字日期时间为 yyyy-mm-dd 抛出异常
Literal datetimes as yyyy-mm-dd throw an exception
我有一个配置了西班牙语设置的数据库,当我将文字日期时间用作 yyyy-mm-dd 时,出现 varchar 超出范围转换错误。
select convert(datetime, '2014-11-19')
returns
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')
谢谢。
yyyy-MM-dd
在SQL服务器中不明确。使用 yyyyMMdd
或 yyyy-MM-ddThh:mm:ss.nnnnnnn
。如果您不是美国人 SQL 服务器(愚蠢地)将 yyyy-MM-dd
读取为 yyyy-dd-MM
旧数据日期和时间数据类型。根据你的错误,你不是美国人,因此是错误的。
注意:yyyy-MM-dd
对于较新的日期和时间数据类型是明确的。 Microsoft 修复了该“功能”。
或者,您可以向 CONVERT
提供样式代码以指定格式。在这种情况下,这将是样式 23:CONVERT(date time,'2014-11-19',23)
datetime
是 more-or-less 一种遗留类型,这是它的一个怪癖。它处理 yyyy-MM-dd
形式的日期文字的方式受 DATEFORMAT 参数的影响。
真正的解决方案是不首先使用日期文字。请改用具有适当类型的参数,在本例中为 date
。
当您确实必须使用日期文字时,请使用 yyyyMMdd
。避免使用 datetime
,而是使用 date
或 datetime2
。
我有一个配置了西班牙语设置的数据库,当我将文字日期时间用作 yyyy-mm-dd 时,出现 varchar 超出范围转换错误。
select convert(datetime, '2014-11-19')
returns
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')
谢谢。
yyyy-MM-dd
在SQL服务器中不明确。使用 yyyyMMdd
或 yyyy-MM-ddThh:mm:ss.nnnnnnn
。如果您不是美国人 SQL 服务器(愚蠢地)将 yyyy-MM-dd
读取为 yyyy-dd-MM
旧数据日期和时间数据类型。根据你的错误,你不是美国人,因此是错误的。
注意:yyyy-MM-dd
对于较新的日期和时间数据类型是明确的。 Microsoft 修复了该“功能”。
或者,您可以向 CONVERT
提供样式代码以指定格式。在这种情况下,这将是样式 23:CONVERT(date time,'2014-11-19',23)
datetime
是 more-or-less 一种遗留类型,这是它的一个怪癖。它处理 yyyy-MM-dd
形式的日期文字的方式受 DATEFORMAT 参数的影响。
真正的解决方案是不首先使用日期文字。请改用具有适当类型的参数,在本例中为 date
。
当您确实必须使用日期文字时,请使用 yyyyMMdd
。避免使用 datetime
,而是使用 date
或 datetime2
。