[英]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.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
乍一看,我觉得您正在转换为日期时间,而不是日期时间。 我假设rev.Timestamp已经是一个日期时间,而您的@date是一个varchar(12)...所以SQL Server抱怨说它无法将日期时间与字符串进行比较...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.