0

我目前正在尝试将此查询放入 Visual Studio

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

这里有什么问题吗?

4

1 回答 1

0

我知道这是旧帖子,但这个答案也会对其他人有所帮助。

在将 PHP 参数与查询绑定时,我遇到了同样的错误消息问题,问题是它需要类型转换第二个参数,正如它在错误消息中所说的那样。

  1. DATEADD(dd, :lifetime_days, GETUTCDATE())
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))
SQLSTATE[HY000]: General error: 20018 Argument data type varchar is invalid for argument 2 of dateadd function. [20018]

最后,当我将绑定参数转换为整数时,它会起作用,因为在您的情况下,lifetime_days 是一个绑定参数,它可能是一个 SQL 变量,如 @time。有时它可能会将第二个参数视为字符串,在这种情况下它需要转换为 int。

DATEADD(dd, CAST(:lifetime_days AS int), CONVERT(CHAR(19), GETUTCDATE(), 20))

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

于 2021-04-19T10:26:04.360 回答