我如何获得两个日期之间的日期?

时间:2014-09-26 01:33:53

标签: sql sql-server

我正在尝试过滤一些值,我需要知道它们是否可以介于两个日期之间,但我无法创建SQL来执行此操作。

我有以下日期:May 10 2010

如果我添加一些年份,我需要找到这个日期是否可以在两个日期之间。

示例1 :此日期可以介于January 15 2014June 20 2014之间吗?

是的,因为May 10 2014是。

示例2 :此日期可以介于May 15 2014June 20 2014之间吗?

不,因为May 10 2014May 10 2015不在此间隔之间。

示例3 :此日期可以介于December 15 2013June 20 2014之间吗?

是的,因为May 10 2014是。

5 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

declare @intervals table (StartDate date, EndDate date);
declare @date date = '2010-05-10';

insert into @intervals values
    ('2014-01-15', '2014-06-20'),
    ('2014-05-15', '2014-06-20'),
    ('2013-12-15', '2014-06-20');

select case when dateadd(year,year(EndDate)-year(@date),@date) 
                 between StartDate and EndDate
            then 'Yes'
            else 'No'
       end,
       StartDate,
       EndDate
  from @intervals;

<强>输出

     StartDate  EndDate
---- ---------- ----------
Yes  2014-01-15 2014-06-20
No   2014-05-15 2014-06-20
Yes  2013-12-15 2014-06-20

答案 1 :(得分:1)

以下方法如何:

  • 如果您的日期范围开始日期和结束日期都是同一年,那么请检查将年份替换为范围年份的日期是否在您的范围之间;
  • 如果您的日期范围结束年度比您的日期范围开始年份正好一年,那么请检查更换年份与范围开始日期年份的日期是否在您的范围之间或更换日期范围结束日期的年份落在您的范围之间;
  • 如果您的日期范围结束年份比您的日期范围开始年份至少多2年,那么它将一直有效

你可能会遇到2月29日的麻烦

答案 2 :(得分:1)

这在SQL Server中有点棘手。我认为最好的方法是根据期间的开始将日期标准化为1月1日。然后,您可以安全地使用datediff()添加适当的年份值。

这样的事情:

select (case when dateadd(year, datediff(year, newdate, newstart), newdate)
                      between newstart and newend
             then 'Between' else 'NotBetween'
        end)
from (select (StartDate - datepart(dayofyear, startDate) + 1) as newstart
             (EndDate - datepart(dayofyear, StartDate) + 1) as newend,
             (TheDate - datepart(dayofyear, StartDate) + 1) as newdate
      from (select cast('2013-12-15' as datetime) as StartDate,
                   cast('2014-06-20' as datetime) as EndDate,
                   cast('2010-05-10' as datetime) as thedate
           ) dates
     ) dates;

答案 3 :(得分:0)

这是一个例子

DECLARE @input datetime ='May 10 2010'

set @input = (select dateadd(year, 4, @input))



select * from T
where   @input >= 'January 15 2014'
              and @input <= 'June 20 2014' 

答案 4 :(得分:0)

执行此操作的一种简单方法是使用DateDiff进行检查。

DECLARE @input datetime ='May 10 2014'

select case when DATEDIFF(d,'2014-01-15',@input) >=0 and  DATEDIFF(d,@input, '2014-06-20') >= 0 then 'yes' else 'No' end