我正在尝试DateAdd我的查询中的 SQL 函数。问题是,当我使用参数设置第二个参数时,number 参数我收到一个错误,其中会显示如下内容:
Failed to convert parameter value from a Decimal to a DateTime
如果我无参数输入它,即硬编码一个 Int,它就可以正常工作。
这有效:
SELECT FieldOne, DateField
FROM Table
WHERE (DateField> DATEADD(day, -10, GETDATE()))
虽然这不会:
SELECT FieldOne, DateField
FROM Table
WHERE (DateField> DATEADD(day, @days, GETDATE()))
其中@days = -10
对我做错了什么有什么想法吗?顺便说一句,我正在 SQL Server Manager 中设置此变量,因为我正在尝试解决 DataAccess 代码中的错误。不确定这是否有影响。
谢谢
最佳答案
我知道这是一篇旧帖子,但对于遇到此问题的其他人来说,我在 Reporting Services 2008 R2 中也遇到了类似的问题,尽管错误消息是“参数数据类型 nvarchar 对于 dateadd 函数的参数 2 无效”。我认为这个问题可能是相关的。
该问题是由 Reporting Services 解析 SQL 代码以生成报表数据集的方式引起的。就我而言,我能够更改此数据集查询:
SELECT DateAdd(wk, @NumWeeks, calendar_date) AS ToWeekFromDate
FROM dim_date
对此:
SELECT DateAdd(wk, Convert(Int, @NumWeeks), calendar_date) AS ToWeekFromDate
FROM dim_date
错误已解决。
编辑:只是稍微扩展一下这个答案:问题是 Reporting Services 无法解析 @NumWeeks
的正确数据类型,我认为可能是因为它位于 内部>DateAdd()
函数,并默认为 NVarchar。添加显式 Convert()
将数据类型设置为 Int(即使它已经是数字)使解析器能够正确识别 @NumWeeks
的数据类型。
关于sql-server - 在查询的 DATEADD 函数中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1783312/