首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于dateadd函数的参数2,nvarchar无效。

对于dateadd函数的参数2,nvarchar无效。
EN

Stack Overflow用户
提问于 2013-07-11 19:26:25
回答 1查看 4K关注 0票数 0

我目前正在尝试将这个查询放到Visual中

代码语言:javascript
运行
复制
DECLARE @StartDate date
SELECT @StartDate = GETDATE();
WITH cte AS 
(
     SELECT -1 AS idx, DATEADD(d,-1,@StartDate) AS idxDate

 UNION ALL
 SELECT idx -1, DATEADD(d,-1,idxDate)
 FROM cte
 WHERE idx >-365
)

SELECT idx DateValue, CONVERT(VARCHAR (11),idxDate,109) + ', ' + CAST
(idx as nvarchar(max)) DateLabel
FROM CTE
OPTION (MAXRECURSION 0) 

然而,我发现这个错误说

nvarchar is invalid for argument 2 of dateadd function

这里有什么不对劲吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-19 10:26:04

我知道它和旧的帖子,但这个答案也会帮助其他人。

当将PHP参数与query绑定时,我也面临同样的错误消息,问题是它需要按错误消息中的话进行第二个参数的类型转换。

  1. DATEADD(dd, :lifetime_days, GETUTCDATE())

代码语言:javascript
运行
复制
SQLSTATE[HY000]: General error: 20018 Argument data type varchar is invalid for argument 2 of dateadd function. [20018]  
  1. DATEADD(dd, :lifetime_days, CONVERT(CHAR(19), GETUTCDATE(), 20))

代码语言:javascript
运行
复制
SQLSTATE[HY000]: General error: 20018 Argument data type varchar is invalid for argument 2 of dateadd function. [20018]

最后,当我将绑定参数强制转换为Integer时,它可以工作,因为在您的示例中,lifetime_days是一个绑定参数,它可以像@time一样是一个SQL变量。有时,它可能会将第二个参数考虑为字符串,在该场景中,它需要转换为int。

代码语言:javascript
运行
复制
DATEADD(dd, CAST(:lifetime_days AS int), CONVERT(CHAR(19), GETUTCDATE(), 20))

希望它能帮助您对此错误消息进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17601739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档