2014-09-19 23 views
2

我有如下记录如何在两个日期和月份之间取得记录而不是一年?

NAME  BIRTHDATE 
A   19/09/1990 
B   25/09/1992 
C   26/09/1993 

和当前日期是19/09/2014 我想从当前日期的生日记录到未来七天下面是我的查询。

CREATE PROCEDURE [dbo].[Get_Birthday] 
as 
begin 
Declare @CurrentDate date ,@NxtDate date 

set @CurrentDate = GETDATE(); 
set @NxtDate = DATEADD(day,7,getdate()) 
print @CurrentDate 
print @NxtDate 
select DocId, DoctorName,DOA,Email from vw_DoctorDetail 
where DOA between @CurrentDate and @NxtDate 
end 

回答

2

你可以试试下面的

CREATE PROCEDURE [dbo].[Get_Birthday] 
as 
beginDeclare @CurrentDate date ,@NxtDate date 

set @CurrentDate = DATEADD(year,-DATEDIFF(year,'19000101',GETDATE()),GETDATE()); 
set @NxtDate = DATEADD(day,7,@CurrentDate) 
print @CurrentDate 
print @NxtDate 
select DocId, DoctorName,DOA,Email from vw_DoctorDetail 
WHERE DATEADD(year,-DATEDIFF(year,'19000101',DOA),DOA) between @CurrentDate and @NxtDate 
+0

您在闰年附近有一些计算问题。这真的很小,但如果今天是2016年2月28日,你只会检查从02-28到03-07的日期。正确的数字将是03-06。我几乎可以肯定质量保证可以与那个 – 2014-09-19 09:43:47

+0

住在一起。这真的取决于OP如何处理它。 – 2014-09-19 09:46:03

2

试试这个

SELECT DocId 
    ,DoctorName 
    ,DOA 
    ,Email 
FROM vw_DoctorDetail 
WHERE (
     DATEPART(DAY, DOA) BETWEEN DATEPART(DAY, GETDATE() + 7) 
      AND DATEPART(DAY, GETDATE()) 
     ) 
    AND DATEPART(MONTH, DOA) = DATEPART(MONTH, GETDATE()) 
+1

如果今天是本月最后一周的日期之一,该怎么办?从现在开始的第七天不会和今天一样。 – 2014-09-19 09:09:10

2

这将从SQLSERVER工作2012+ 请注意这是使用2000是闰年,以避免问题。

SELECT 
    DocId, 
    DoctorName, 
    DOA, 
    Email 
FROM 
    vw_DoctorDetail 
WHERE 
datefromparts(2000, month(DOA), day(DOA)) 
    between datefromparts(2000, month(@CurrentDate), day(@CurrentDate)) and 
       datefromparts(2000, month(@NxtDate), day(@NxtDate)) 
+0

这不会工作在非飞跃。如果您使用年份(@currentdate)而不是2000年,它会正确计算它是否为闰年。 – pancho018 2014-09-19 10:35:53

+0

@ pancho018实际上它工作正常,我不在乎它是不是闰年,因为它不影响我的计算 – 2014-09-19 10:51:20

相关问题