我有一个接收3个参数的程序:
<div id="results">
<div class="container">
</div>
<div class="row"></div>
<div class="col"></div>0 Col
<div class="col"></div>1 Col
<div class="col"></div>2 Col<br>
After container
</div>
我需要做的是根据上述内容输出一个新日期。由于@interval不正确,因此dateadd不起作用。
@startdate = '2017-01-01'
@interval = 'DD'
@duration = 5
为dateadd指定的参数1无效。
有人能引导我吗?
答案 0 :(得分:4)
这样的事情:
select case @interval
when 'yy' then DateAdd(Year, @duration, @startdate)
when 'qq' then DateAdd(Quarter, @duration, @startdate)
when 'mm' then DateAdd(Month, @duration, @startdate)
when 'wk' then DateAdd(WeeK, @duration, @startdate)
when 'dd' then DateAdd(Day, @duration, @startdate)
when 'hh' then DateAdd(Hour, @duration, @startdate)
when 'mi' then DateAdd(Minute, @duration, @startdate)
when 'ss' then DateAdd(Second, @duration, @startdate)
else null
end
答案 1 :(得分:4)
一种方法是使用动态SQL。另一个是巨大的case
陈述。类似的东西:
declare @endDate date;
declare @sql nvarchar(max);
set @sql = 'select @endDate = dateadd(@interval, @duration, @startdate)';
set @sql = replace(@sql, '@interval', @interval);
exec sp_executesql @sql, N'@duration int, @startdate date, @endDate date output',
@duration = @duration, @startdate = @startdate,
@endDate = @endDate output;
问题是第一个参数是关键字,而不是字符串。因此,它不能作为参数传递。
答案 2 :(得分:3)
您将需要CASE
,因为无法动态提供参数:
select case @interval
when 'dd' then DATEADD(dd, @duration, @startdate)
when 'mm' then DATEADD(mm, @duration, @startdate)
...
end