0

我的演员阵容失败了,我无法理解为什么。

这是失败的原因:

select cast('16/04/2012' as datetime)

错误是:

“将 char 数据类型转换为日期时间数据类型导致日期时间值超出范围。”

如果我使用CONVERTfor103格式,它可以正常工作,如您所料。

服务器设置为英国日期格式,因此 MSSQL 帐户也应默认为英国格式。它已重新启动,因此该服务不应该使用不同的日期格式。

这是一个 SQL2005 实例。

我真正想知道的是,什么可能导致 CAST 失败?

4

6 回答 6

1

使用此代码:

SELECT convert(datetime, '16/04/2012',105)
于 2013-04-09T13:25:50.170 回答
0

日期格式和日期时间格式不一定相同。虽然它可能会为 hh:mm:ss 隐式添加 00:00:00,但可以尝试添加它。103 型只包括 dd/mm/yyyy,所以它当然可以工作。

于 2013-04-09T13:02:47.977 回答
0

您的数据格式为 MM:dd:YY,并且 cast 尝试将您转换为“dd/MM/yy”的“16/04/2012”并抛出异常,因为 16 小于 12 个月。

您可以在服务器设置中更改数据格式,也可以在查询之前 使用SET DATEFORMAT语句

于 2013-04-09T13:03:09.170 回答
0

你试过SET DATEFORMAT DMY吗?

于 2013-04-09T13:01:44.623 回答
0

你确定服务器是英国语言格式吗?如果我运行:

set language british
select cast('16/04/2012' as datetime)

然后我得到:

2012-04-16 00:00:00.000

您可以检查当前会话语言

select @@language

会话语言默认来自正在使用的登录名,假设它是 SQL Server 提供的登录名(即不是 Windows 用户)。检查给定用户的语言:

select loginproperty('myuser', 'DefaultLanguage')

要为所有新创建的登录名进行永久服务器更改:

EXEC sp_configure 'default language', 23
reconfigure

...其中 23 是通过langid获得的sp_helplanguage

于 2013-04-09T13:05:53.493 回答
0

始终使用语言中立的日期格式 - 无论任何设置如何,它都将始终有效:

CAST('YYYYMMDD', AS DATE);

4 位年,2 位月,2 位日,无分隔符。您将永远不必再担心默认语言设置。

于 2013-04-09T16:55:36.553 回答