1

我有这个正在返回的 SQL Server 查询Conversion failed when converting date and/or time from character string.

(
    @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”的字符串值。可能是什么原因?

4

3 回答 3

4

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

如所写,您正在尝试制作'@date'一个datetime不会解析的内容。

话虽如此,您可能应该datetime首先将输入参数设为 a 。

于 2012-05-04T18:37:18.767 回答
1

删除@JNK 所描述的单引号以使您的查询正常工作。但是,为了可能获得更好的性能(索引使用),请尝试此查询(如果您在列Revisions.Timestamp和上有索引Logs.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
于 2012-05-04T18:53:49.180 回答
0

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

于 2012-05-04T18:34:04.017 回答