【发布时间】:2016-09-01 16:39:35
【问题描述】:
我正在 Microsoft SQL Server 2012 中创建一个过程,但我遇到了问题。错误信息是:
消息 241,第 16 级,状态 1,第 4 行
从字符串转换日期和/或时间时转换失败。
这是我的程序:
DECLARE @name varchar(255)
SELECT name
FROM sysobjects
WHERE type = 'P'
AND (name LIKE 'pr_My_app_log_%' OR name LIKE 'pr_My_item_log_%')
AND (DATEDIFF(dd, getdate(), RIGHT(name, 8)) < -2)
我的数据库中有这些名称的过程:
pr_My_app_log_20160830
pr_My_app_log_20160829
DATEDIFF 应该有问题。有人可以帮我更正查询并解释一下问题吗?
谢谢。
【问题讨论】:
-
这是因为您在 sysobjects 中有行,其中右 8 个字符不是有效日期。仅仅因为 datediff 谓词在你的代码中是最后的并不意味着引擎会最后做那个检查。
-
这不是万无一失的,但它可能足以满足您的目的:
and case when right(name, 8) like '20[0-9][0-9][0-1][0-9][0-3][0-9]' then datediff(dd, getdate(), right(name, 8) end < -2
标签: sql-server procedure