sql-server - 在查询的 DATEADD 函数中使用参数

标签 sql-server parameters dateadd

我正在尝试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/

相关文章:

c - 将“...”参数传输到其他函数

postgresql - 通过在 postgresql 中减去一天,将一个月添加到所需的列

sql-server - 从 SQL Server 2005 中的日期时间减去分钟

sql-server - SQL Server - 删除/更新堆中的 LOB 数据

sql - 如何使用 SQL 中的用户定义函数返回记录数?

c# - 从用户定义的类创建 SQL Server 表

spring - Spring Security中如何获取GET参数?

sql-server - Sql Server AlwaysOn 组可以作为事务复制订阅者吗?

java - 如何在单个项目的详细信息中而不是在单个 ListView 项目中显示参数

sql - 在java中使用sql DATEADD函数