2013-03-19 127 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