如何在SQL中使用While循环来创建变量

时间:2016-08-03 20:12:21

标签: sql-server tsql

需要创建一个带有日期列表的IN子句。列表需要按降序排列。我创建了一个名为@cols的变量,并尝试使用以下代码填充它:

declare @end date='2016/05/30' 
declare @begin date = DATEADD(month, DATEDIFF(month, 0, @end), 0) ;
declare @curdate date = @end;  -- start on the last day
print @curdate;
print @begin;

DECLARE @cols NVARCHAR (MAX)

while @curdate >=@begin  -- goes from end of the month to beginning of the month
begin
     select @cols = @cols + ',[' + CONVERT(NVARCHAR, @curdate, 106) + ']';
     select @curdate =  DATEADD(DAY,-1,@curdate ) -- subtract a day
end

print @cols;   
print @curdate;
print @begin;

我希望得到5/30 / 16,5 / 29 / 16,5 / 28/16等(当然格式正确)。代码运行没有错误,但@cols总是空的。

2 个答案:

答案 0 :(得分:5)

您获得<script> function Replace() { var str = document.getElementById("id").innerHTML; var res = str.replace(/(?!beforethree)before/gi, "after"); document.getElementById("id").innerHTML = res; } </script> NULL的原因是因为在进入while循环之前尚未为其分配值。它仍为@ColsNULL +任何= NULL

要解决此问题,您可以在while循环之前将NULL设置为空字符串:

@Cols

答案 1 :(得分:0)

为什么要将日期列表传递给IN子句?你能不能只使用下面的简单日期范围?

DECLARE @enddate = '2016-05-30'

SELECT *
FROM sometable
WHERE somedate >= DATEADD(month, DATEDIFF(month, 0, @enddate), 0)
    AND somedate < EOMONTH(@enddate)