0

现在我知道这个问题已经被问过好几次了,我已经回答了几十个答案,但似乎没有什么对我有用。我正在尝试将字符串转换为 SQL 中的日期时间,但出现以下错误:

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列实际上只是消息日志条目的时间戳......),我可以通过使用子字符串成功获取它。

该子字符串 ( TourTimeStamp) 的格式为:dd/mm/yyy hh:mm:ss例如25/02/2012 20:55:13

任何帮助将不胜感激。

4

1 回答 1

0

我假设这是 MS SQL Server。

您必须指定格式:试试这个:

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

请在此处查找支持的格式列表

于 2013-03-19T10:52:40.617 回答