将varchar转换为日期格式

时间:2012-11-28 11:16:44

标签: sql sql-server sql-server-2005 type-conversion

我有2个字段date_issued和time_issued,如下所示

date_issued       time_issued
1031              225225 (22 hrs 52 mins 25 secs)    

我需要将varchar值转换为datetime为dd-mm-yy h:m:s

我试过了

select CONVERT(datetime, date_issued+time_issued ,120) as ttt from tbl

但显示以下错误

Msg 241, Level 16, State 1, Line 2
Conversion failed when converting datetime from character string.

任何想法??

3 个答案:

答案 0 :(得分:1)

假设年份是2012年:

select CONVERT(datetime, '2012' + LEFT(date_issued, 2) + RIGHT(date_issued, 2) + ' ' + LEFT(time_issued, 2) + ':' + SUBSTRING(time_issued, 3, 2) + ':' + right(time_issued, 2))

答案 1 :(得分:0)

嗯,首先。

你有一个明显的错误。如果这些列是数字(而不是字符串),那么你要添加它们,这显然是错误的。

其次,如果这些是字符串,那么你错过了一年的日期区域并且你错过了:在时间区域。 第三,你需要在这两者之间添加一个'。

在我的例子中

SELECT convert(datetime,'20091231 12:12:12') FROM DUAL

我得到了

2009-12-31 12:12:12.000

P.S。是的,我在SQL服务器上有DUAL,这不是在Oracle中运行的。

答案 2 :(得分:0)

以下是一种方法,如果数据包含前导零,则可以删除REPLICATE,否则需要填充以区分日期部分。

select
    cast ( 
        stuff(replicate('0', 4 - len(date_issued)) + date_issued, 3, 0, '/') + '/2012'
        + ' ' +
        stuff(stuff(replicate('0', 6 - len(time_issued)) + time_issued, 3, 0, ':'), 6 ,0 ,':')
    as datetime)