几个小时一直在努力奋斗。
我有一组看起来像这样的数据:
表名:TEST_1
log_date
和log_time
目前都是varchar(200)
当前格式化示例:
log_date = 20131004
log_time = 113052:123
我想将log_date
和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
Msg 241,Level 16,State 1,Line 3
从字符串转换日期和/或时间时转换失败。
我尝试将数据类型更改为varchar
并且它没有给出错误但它也没有转换任何内容。
帮助表示赞赏!
由于
答案 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)