我的表中有一个列表,其中包含StartDate (not null)
和EndDate (null)
(两种类型date
都没有时间)。
有效参赛作品包含StartDate <= querydate
和EndDate with null or > querydate
。
所以我的查询基本上就像
SELECT *
FROM MyDataTable
WHERE StartDate <= mydate
AND (EndDate IS NULL OR EndDate >= mydate )
对于图表中的统计信息,我想知道哪些在过去几个月的特定月份中处于活动状态。我编程(编程)一年又一个月(2017-10,2017-11,2017-12,2018-1,...)
如何使用程序循环的年份和月份选择所有活动条目,但忽略日期部分?
答案 0 :(得分:0)
如果您想要整个月的活动:
SELECT *
FROM MyDataTable
WHERE StartDate <= '2017-10-01' AND
(EndDate IS NULL OR EndDate >= '2017-11-01');
如果您希望在本月的任何时间有效:
SELECT *
FROM MyDataTable
WHERE StartDate < '2017-11-01' AND
(EndDate IS NULL OR EndDate > '2017-10-01');
答案 1 :(得分:0)
我认为你可以通过使用'DATEDIFF ( datepart , startdate , enddate )'只用几个月来实现这个目标:
DECLARE @startDate DATE = '2017-11-01';
DECLARE @numberOfMonth INT;
SELECT @numberOfMonth = datediff(month, @startDate, GETDATE());
SELECT *
FROM MyDataTable
WHERE datediff(month, StartDate, GETDATE()) >= @numberOfMonth
AND (EndDate IS NULL OR datediff(month, EndDate, GETDATE()) <=
@numberOfMonth)