我已经包含在" in"声明logdate中包含的数据。
由于某种原因,我无法转换它们。我更习惯于oracle数据库,它以一种宽容的方式处理这些东西。因此,我正在努力弄清楚出了什么问题。 select CONVERT(DATETIME,opencall.logdate,102)
from opencall
where logdate in
( '17/08/2016 10:33:08'
,'17/08/2016 10:33:13'
,'17/08/2016 10:33:17'
,'17/08/2016 10:34:03'
,'17/08/2016 10:34:14'
,'17/08/2016 10:34:46')
;
我收到错误 [S0003] [242]将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
我试过
select cast(opencall.logdate as datetime)
from opencall
(
'17/08/2016 10:33:08'
,'17/08/2016 10:33:13'
,'17/08/2016 10:33:17'
,'17/08/2016 10:34:03'
,'17/08/2016 10:34:14'
,'17/08/2016 10:34:46'
)
我收到错误 [S0003] [242]将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
这次我做错了什么?
: - )
答案 0 :(得分:0)
最安全的方法是使用ISO格式来格式化您的日期时间,无论您的数据库采用何种文化,它都将被接受。
好的信息可以在这里找到:http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
了解日期和时间这是您的格式:' 1998-02-23T14:23:05'
select cast(opencall.logdate as datetime)
from opencall
where logdate in
(
'2016-08-17T10:33:08',
and so on...
答案 1 :(得分:0)
您遇到错误的原因是您的系统设置为mm / dd / yyyy并且您尝试使其接受dd / mm / yyyy,因此在相应的天数内dd超过12或mm的任何值本月将抛出错误。
要克服此问题,请使用CONVERT
两次来明确定义格式。
第一个CONVERT
通过指定输入格式为103(欧洲)来处理超出范围的问题。第二个CONVERT
将结果转换为102,美国mm / dd / yyyy +时间格式。
select CONVERT(DATETIME, convert(datetime, '17/08/2016 10:33:08',103) ,102)