SQL Server仅选择日期年/月部分而不进行日期和比较

时间:2018-03-14 17:32:10

标签: sql sql-server date select

我的表中有一个列表,其中包含StartDate (not null)EndDate (null)(两种类型date都没有时间)。

有效参赛作品包含StartDate <= querydateEndDate 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,...)

如何使用程序循环的年份和月份选择所有活动条目,但忽略日期部分?

2 个答案:

答案 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)
相关问题