SQL Server:转换函数在数据类型时间不起作用

时间:2013-10-09 11:28:42

标签: sql sql-server-2008

几个小时一直在努力奋斗。

我有一组看起来像这样的数据:

表名:TEST_1

log_datelog_time目前都是varchar(200)

当前格式化示例:

  • log_date = 20131004
  • log_time = 113052:123

我想将log_datelog_time转换为更好的格式(尤其是时间)

这是我的代码

INSERT INTO TEST_2(log_date, log_time, process, log_type, detail_msg, decision_msg)
   SELECT  
      CONVERT(date, log_date, 111), CONVERT(time, log_time, 114), 
      process, log_type, detail_msg, decision_msg
   FROM TEST_1 

现在log_date转换似乎工作正常,但在尝试转换log_time

时出现此错误
  

Msg 241,Level 16,State 1,Line 3
  从字符串转换日期和/或时间时转换失败。

我尝试将数据类型更改为varchar并且它没有给出错误但它也没有转换任何内容。

帮助表示赞赏!

由于

2 个答案:

答案 0 :(得分:1)

一种方式......它归结为字符串操作,我希望真正看到更多的值。

SELECT
  CONVERT(date, log_date, 111) AS log_date
, cast(
       left(log_time,2)
       + ':' + substring(log_time,3,2)
       + ':' + substring(log_time,5,2)
       + right(log_time,4)
       AS time)                AS log_time
FROM test_1


CREATE TABLE Test_1
    ([Log_date] varchar(200), [Log_time] varchar(200))
;

INSERT INTO Test_1
    ([Log_date], [Log_time])
VALUES
    ('20131004', '113052:123')
;

|   LOG_DATE |         LOG_TIME |
|------------|------------------|
| 2013-10-04 | 11:30:52.1230000 |



  [1]: http://sqlfiddle.com/#!3/1dff0/6

答案 1 :(得分:0)

虽然20131004被视为varchar转化的有效datetime值,但113052:123不是。{/ p>

由于您指定了114,因此其格式应类似于11:30:52:123

尝试一下:

   CONVERT(
     time,
     substring(log_time,1,2)+':'+
     substring(log_time,3,2)+':'+
     substring(log_time,5,2)+
     substring(log_time,7,4), 
     114)