Dam*_*ien 5 sql-server parameters dateadd
我在我的查询中尝试使用SQL 的DateAdd函数.问题是当我使用参数设置第二个争论时,数字参数我得到一个错误,这将说明如下:
无法将参数值从Decimal转换为DateTime
如果我输入无参数,即硬编码Int,它工作正常.
这有效:
SELECT FieldOne, DateField
FROM Table
WHERE (DateField> DATEADD(day, -10, GETDATE()))
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
SELECT FieldOne, DateField
FROM Table
WHERE (DateField> DATEADD(day, @days, GETDATE()))
Run Code Online (Sandbox Code Playgroud)
其中@days = -10
什么想法我做错了什么?顺便说一句,我在SQL Server管理器中设置此变量,因为我正在尝试解决我的DataAccess代码中的错误.不确定这是否有所作为.
谢谢
Nat*_*ths 11
我知道这是一个旧帖子,但对于有这个问题的其他人我在Reporting Services 2008 R2中遇到了类似的问题,尽管错误消息是"参数数据类型nvarchar对于dateadd函数的参数2无效".我认为这个问题可能有关系.
该问题是由Reporting Services分析SQL代码以生成报表数据集的方式引起的.就我而言,我能够更改此数据集查询:
SELECT DateAdd(wk, @NumWeeks, calendar_date) AS ToWeekFromDate
FROM dim_date
Run Code Online (Sandbox Code Playgroud)
对此:
SELECT DateAdd(wk, Convert(Int, @NumWeeks), calendar_date) AS ToWeekFromDate
FROM dim_date
Run Code Online (Sandbox Code Playgroud)
并且错误已解决.
编辑:只是为了扩展这个答案:问题是Reporting Services无法解析正确的数据类型@NumWeeks,我想可能是因为它在DateAdd()函数内部,并且默认为NVarchar.添加显式Convert()以将数据类型设置为Int(即使它已经是数字)使解析器能够正确识别数据类型@NumWeeks.
听起来您正在将小数作为第三个参数而不是第二个参数传递给DATEADD(),例如:
DATEADD(day, GETDATE(), @days)
Run Code Online (Sandbox Code Playgroud)
尽管问题中的片段看起来不错。
(为了更加清楚起见,上面的代码片段是一个错误。这是将从问题中生成错误的代码。)
| 归档时间: |
|
| 查看次数: |
30267 次 |
| 最近记录: |