2012-11-28 138 views
0

我已2個字段date_issued和time_issued如下轉換VARCHAR到日期格式

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

我需要的是VARCHAR值轉換成日期時間作爲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. 

任何想法??

回答

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)) 
0

嗯,首先。

你有明顯的錯誤。如果這些列是數字(不是字符串),那麼您將它們加起來,這顯然是錯誤的。

其次,如果這些是字符串,則缺少日期區域中的一年,而您缺少:在時間區域。 第三,你需要添加一個'我的那些例子之間2.

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

我得到

2009-12-31 12:12:12.000 

附:是的,我在SQL服務器上有DUAL,這不是在Oracle中運行的。

+0

這不正是他想要 – polin

+0

好,怎麼樣我寫他確切的代碼,所以他並不需要去思考。 date_issued + 2012 +''+ substring(time_issued,0,2)+':'+ substring(time_issued,2,2)+':'+ substring(time_issued,4,2)。如果你認爲這會幫助他學習一些東西而不是複製粘貼? –

+0

以及那種情況......你是對的。想法是隻顯示方式,而不是完整的代碼 – polin

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)