如何将此日期字符串转换为日期时间?

时间:2016-08-18 13:36:35

标签: sql-server

我已经包含在" 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数据类型转换为日期时间数据类型会导致超出范围的值。

这次我做错了什么?

: - )

2 个答案:

答案 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)