0

几个小时以来一直在努力解决这个问题。

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

表名:TEST_1

log_date并且log_time都是目前varchar(200)

当前格式示例:

  • log_date = 20131004
  • log_time = 113052:123

我想将log_dateand转换log_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

消息 241,级别 16,状态 1,第 3 行
从字符串转换日期和/或时间时转换失败。

我尝试将数据类型更改为varchar,它没有给出错误,但它也没有转换任何东西。

帮助表示赞赏!

谢谢

4

2 回答 2

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
于 2013-10-09T11:47:22.693 回答
0

虽然20131004被认为是转换的有效值,varchar但不是。datetime113052:123

由于您指定 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)
于 2013-10-09T11:38:20.897 回答