2013-03-19 58 views
0

現在我知道這個問題已經被問了好幾次,我已經通過幾十個答案了,但似乎沒有任何工作,我..我試圖將字符串轉換成datetime在SQL,但得到以下錯誤:在SQL字符串轉換爲DateTime

Arithmetic overflow error converting expression to data type datetime. 

這是我試圖運行查詢:

SELECT MessageText, 
     CONVERT(datetime,SUBSTRING(MessageText, CHARINDEX('(', MessageText)+1,     
     CHARINDEX(')', MessageText) - 
     CHARINDEX('(', MessageText)-1)) AS TourTimeStamp, 
     TIMESTAMP 
FROM tblMessageLog 
WHERE MessageText LIKE 'Tour run timestamp%for tour%has been%' 
ORDER BY TIMESTAMP DESC 

所以,在MessageText,還有就是我要找的時間戳( TimeStamp列實際上只是messagelog條目的時間戳...)和我可以通過使用子字符串成功獲取此。

此substring(TourTimeStamp)的格式爲:例如dd/mm/yyy hh:mm:ss25/02/2012 20:55:13

任何幫助將不勝感激。

+0

你能否包含這個'SUBSTRING'的結果? – 2013-03-19 10:31:36

+1

它是什麼數據庫? – MarcinJuraszek 2013-03-19 10:31:56

+0

Grzegorz W - 我編輯的問題更清晰;我提到的日期格式是我得到的子串。所以我可以成功地從MessageText字段獲取日期,但它目前是字符串格式! – Kyle 2013-03-19 10:37:06

回答

0

我想這是MS SQL服務器。

你必須指定格式: 試試這個:

Select 
    MessageText, 
    CONVERT(
    datetime, 
    SUBSTRING(
     MessageText, 
     CHARINDEX('(', MessageText) + 1, 
     CHARINDEX(')', MessageText) - CHARINDEX('(', MessageText) - 1), 
    103) 
    AS TourTimeStamp, 
    Timestamp 
FROM 
    tblMessageLog 
WHERE 
    MessageText LIKE 'Tour run timestamp%for tour%has been%' 
ORDER BY TimeStamp DESC 

而且look here for list of supported formats

+0

嗨,這似乎工作!我只是假設DateTime style 103被定義爲dd/mm/yyyy,它會減少關閉的時間(即no hh:mm:ss),並且當我嘗試它時它一開始並不起作用,但那一定是由於另一個錯誤的地方...非常感謝! – Kyle 2013-03-19 12:00:06