2013-07-15 239 views
0

我有這個疑問正在運行無差錯:數字轉換成日期時間日期在SQL Server查詢

Select 
    [Object], 
    CASE WHEN MsgID = '61' THEN SUBSTRING(Parms,35,6) END AS [MEDIA] 
from JnlDataSection 
WHERE [Object] = '061 STATEMENTS' 

還有就是我很感興趣,此表稱爲日期第三列。然而,數據庫很早以前就已經開發出來了,並且已經將數據庫的日期變成了(numeric(17,9), not null數據類型)。例如。 20130106.050257023

我想要的是分成兩個不同的列,一個是日期:2013-01-06,第二個是時間:05:02:57(無微秒)。

我想出了這個查詢轉換:

Select 
     [Object], 
     CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+ 
     SUBSTRING([Date],10,2)+':'+ 
     SUBSTRING([Date],12,2)+':'+ 
     SUBSTRING([Date],14,2)+'.'+ 
     SUBSTRING([Date],15,3))) AS DATE) 'Date', 
     LEFT(CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+ 
     SUBSTRING([Date],10,2)+':'+ 
     SUBSTRING([Date],12,2)+':'+ 
     SUBSTRING([Date],14,2)+'.'+ 
     SUBSTRING([Date],15,3))) AS TIME),8) 'Time', 
     CASE WHEN MsgID = '61' THEN SUBSTRING(Parms,35,6) END AS [MEDIA] 
from JnlDataSection 
WHERE [Object] = '061 STATEMENTS' 
    AND CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' + 
     substring(convert(varchar(50), [Date]), 5, 2) + '-' + 
     substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) = 
     CONVERT(date, DATEADD(day, -1, getdate())) --Converting 

不過,我收到此錯誤,當我運行此:

消息8116,級別16,狀態1,行1
子字符串函數的參數1的參數數據類型數值無效。

任何人都可以修改我的查詢爲它運行無錯誤?這將不勝感激。

回答

2

該數據是一個數字類型。你要投這麼一個字符串類型,然後才能與子功能的使用:

substring(cast([date] as varchar(18)), 10,2) 

對於這個問題,你的最終目標應該是將這些值轉換成datetime列。

+0

你可以在我現有的查詢中包括那個嗎?我不知道我在哪裏適合。 –

+0

我也想立即測試它,看看它是否可以正常工作,如果可能的話,謝謝。 –