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