【问题标题】:nvarchar is invalid for argument 2 of dateadd functionnvarchar 对于 dateadd 函数的参数 2 无效
【发布时间】:2013-07-11 19:26:25
【问题描述】:

我目前正在尝试将此查询放入 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

这里有什么问题吗?

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?
  • Microsoft SQL 和 Visual Studio 2008 R2
  • 你可以试试改成DATEADD(d,Convert(Int, -1),@StartDate)吗?参考:stackoverflow.com/a/10376679/1768890
  • 您的查询工作正常SQL Fiddle。一定有其他东西给你这个错误。
  • 如果我们知道您的总体目标是什么,然后您将上述内容描述为“这就是我目前所拥有的”,我们可能会做得更好。看起来您正在做某事,其日期(忽略闰年)一直持续到昨天,但我不知道您打算如何处理这些日期。

标签: sql-server visual-studio tsql sql-server-2008-r2


【解决方案1】:

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

在将 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 在您的情况下是一个绑定参数,它可以是一个像@time 这样的SQL 变量。有时它可能会将第二个参数视为字符串,在这种情况下它需要转换为 int。

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

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

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2023-04-06
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多