【问题标题】:SQL Server- How to use data in column for DATEADD - datepartSQL Server - 如何使用 DATEADD 列中的数据 - datepart
【发布时间】:2020-05-05 15:00:20
【问题描述】:

我想在使用 DATEADD 函数时将来自变量/来自表列的数据作为“日期部分”传递。下面是我的代码的 sn-p,我看到如下错误。

DECLARE @vchstring VARCHAR(20)
SET @vchstring='month'
SELECT DATEADD(@vchstring,1,GETDATE())

我收到此错误:

消息 1023,第 15 级,状态 1,第 104 行
为 dateadd 指定的参数 1 无效。

这可能是重复的,但我找不到任何信息。

【问题讨论】:

  • 你不能那样做。您需要动态 sql,或者您需要添加一些 IF/ELSE 语句或检查 vchstring 值的 Case 语句。
  • 令人讨厌的是他们不允许参数化该参数
  • 是的,令人讨厌的是,我们无法在 DATEADD 函数中参数化日期部分。我将创建一个带有 if/else 条件的静态函数

标签: sql-server tsql azure-sql-database


【解决方案1】:

SQL Server 不支持宏替换。您要么必须使用动态 SQL,要么必须使用嵌套 case/IF,甚至是 SELECT

示例

DECLARE @vchstring VARCHAR(20)
SET @vchstring='month'

Select Value
 From  ( values ('year'  ,DATEADD(YEAR   ,1,GETDATE()) ) 
               ,('month' ,DATEADD(MONTH  ,1,GETDATE()) ) 
               ,('day'   ,DATEADD(DAY    ,1,GETDATE()) ) 
               ,('hour'  ,DATEADD(HOUR   ,1,GETDATE()) ) 
               ,('minute',DATEADD(MINUTE ,1,GETDATE()) ) 
       ) A (inc,value)
 Where inc = @vchstring

退货

Value
2020-06-05 10:09:29.660

【讨论】:

  • 感谢@John,这似乎比字符数较少的情况要好。
  • @Idea 总是乐于提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多