小编Not*_*oth的帖子

从引用先前声明的变量的CASE语句中分配T-SQL变量

我正在尝试动态定义查询的时间段,并在将用户输入转换为日期时间格式时遇到问题,如下所示:

declare @ObjectName nvarchar(256) = '%',
        @TimePeriod int = '1',
        @TimeInterval nvarchar(128) = 'month',
        @PastPeriodDate datetime


SET @PastPeriodDate = 
  CASE @TimeInterval 
    WHEN 'hour'     THEN (select DATEADD(hour,-@TimePeriod,getdate())
    WHEN 'day'      THEN (select DATEADD(day,-@TimePeriod,getdate())
    WHEN 'week'     THEN (select DATEADD(week,-@TimePeriod,getdate())
    WHEN 'month'    THEN (select DATEADD(month,-@TimePeriod,getdate())
    WHEN 'year'     THEN (select DATEADD(year,-@TimePeriod,getdate())
    ELSE ''
  END

print @PastPeriodDate
Run Code Online (Sandbox Code Playgroud)

例如,我需要在执行时间前一周将'1''周'转换为日期时间字符串,并且在过去完成此操作,但从不涉及案例陈述.这是使用where子句在以下查询中过滤结果:

select * 
from table1 t1
where t1.time > @PastPeriodDate
Run Code Online (Sandbox Code Playgroud)

尝试运行此查询时,我收到以下输出:

Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server case dateadd reporting-services

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

case ×1

dateadd ×1

reporting-services ×1

sql ×1

sql-server ×1