繁体   English   中英

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

[英]Conversion failed when converting date and/or time from character string

我有此SQL Server查询, Conversion failed when converting date and/or time from character string. ,返回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”的字符串值。 可能是什么原因?

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

如所写,您试图将'@date'为无法解析的datetime

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

删除@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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM