我的演员失败了,我无法理解为什么。
这是失败的原因:
select cast('16/04/2012' as datetime)
错误是:
“将char数据类型转换为datetime数据类型 在超出范围的日期时间值。“
如果我使用CONVERT
格式为103
,那么它可以正常运行。
服务器设置为英国日期格式,因此MSSQL帐户也应该默认为britsh格式。它已重新启动,因此不应该是该服务使用不同的日期格式。
这是一个SQL2005实例。
我真正想知道的是,什么可能导致CAST失败?
答案 0 :(得分:1)
使用此代码:
SELECT convert(datetime, '16/04/2012',105)
答案 1 :(得分:0)
您是否尝试过SET DATEFORMAT DMY
?
答案 2 :(得分:0)
日期格式和日期时间格式不一定相同。虽然它可能会隐式添加00:00:00为hh:mm:ss,但也可以尝试添加它。 103型只包括dd / mm / yyyy,所以它当然有效。
答案 3 :(得分:0)
你有一个数据格式为MM:dd:YY,并且强制尝试转换你'16 / 04/2012',即'dd / MM / yy'并抛出异常,因为16小于12个月。
您可以在server settings中更改数据格式,也可以在查询前使用SET DATEFORMAT语句
答案 4 :(得分: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
。
答案 5 :(得分:0)
始终使用语言中性日期格式 - 无论任何设置,它始终有效:
CAST('YYYYMMDD', AS DATE);
4位数年份,2位数月份,2位数日期和NO分隔符。您再也不用担心默认语言设置了。