首页 > 解决方案 > SQL Server - 如何使用 DATEADD 列中的数据 - datepart

问题描述

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

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

我收到此错误:

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

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

标签: sql-servertsqlazure-sql-database

解决方案


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

推荐阅读