从字符串转换日期和/或时间时转换失败

时间:2012-05-04 18:25:37

标签: sql-server

我有这个返回Conversion failed when converting date and/or time from character string.

的SQL Server查询
(
    @numberRecords int,
    @date varchar(12)
)

AS
SET ROWCOUNT @numberRecords
SELECT re.ID, re.RecentChangeTypeID, re.LogID, re.RevisionID
FROM RecentChanges re
    FULL OUTER JOIN Revisions rev
        ON re.RevisionID = rev.ID
    FULL OUTER JOIN Logs lg
        ON re.LogID = lg.ID
WHERE convert(datetime, rev.Timestamp) >= '@date' OR
      convert(datetime, lg.Timestamp) >= '@date';
RETURN

date参数以“dd-MM-yyyy”格式返回字符串值。可能是什么原因?

3 个答案:

答案 0 :(得分:4)

不要将@date参数放在单引号内 - 它被解释为字符串而不是参数。

如上所述,您尝试将'@date'设为datetime,但不会解析。

话虽这么说,你应该首先将输入参数设为datetime

答案 1 :(得分:1)

删除@JNK描述的单引号,以使查询正常工作。但是,为了获得更好的性能(索引使用),请尝试此查询(如果列Revisions.TimestampLogs.Timestamp上有索引):

SELECT 
    re.ID, re.RecentChangeTypeID, re.LogID, re.RevisionID
FROM RecentChanges         re
    INNER JOIN Revisions   rev ON re.RevisionID = rev.ID
WHERE rev.Timestamp >= @date
UNION
SELECT 
    re.ID, re.RecentChangeTypeID, re.LogID, re.RevisionID
FROM RecentChanges    re
    INNER JOIN Logs   lg ON re.LogID = lg.ID
WHERE lg.Timestamp >= @date

答案 2 :(得分:0)

乍一看,它让我看到你正在转换到日期时间,而不是它。我假设rev.Timestamp已经是一个日期时间,而你的@date是一个varchar(12)...所以SQL Server抱怨它无法将日期时间与字符串进行比较......