如何查找结束日期小于月份和年份的记录

时间:2016-09-19 09:38:56

标签: sql-server

我的表员工有id和joindate列,现在我想创建一个执行此操作的查询:

  1. 如果我越过月份和年份,则应显示加入小于或等于此日期(月份和年份)的所有记录。

  2. 如果月份为空,则不应考虑月份,只应考虑年份。

3 个答案:

答案 0 :(得分:1)

SELECT * FROM YourTable WHERE TheDate < 
   DATEADD(MONTH, CAST(COALESCE(@MONTH,1) AS int) - 1,CAST(CAST(@YEAR as varchar(4)) + '0101' AS DATETIME));

答案 1 :(得分:0)

 DECLARE @tblTest AS TABLE 
 (
   Name  VARCHAR(50),
   JoiningDate Date
 )  

 INSERT INTO @tblTest
  Values ('Sandip','11-Feb-2016')
  ,('Jigar','20-Jun-2016')
  ,('Milan','05-Jan-2015')
  ,('Suresh','25-Apr-2015')


Declare @Month VARCHAR(20)='Feb',@Year VARCHAR(4)='2015'
Declare @LastDateOfMonth Date

IF ISNULL(@Month,'')=''
BEGIN
    SET @Month='DEC'
END

SET @LastDateOfMonth=DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, CAST('01-'+ @Month+'-'+@Year AS DATE)) + 1, 0))

SELECT
    *
FROM @tblTest
WHERE   
    JoiningDate<=@LastDateOfMonth

答案 2 :(得分:0)

希望这可以帮助你:

Declare @yourtable table (EmpName varchar(10), JoiningDate datetime) 

 INSERT INTO @yourtable
  Values ('A','10-Jan-2016')
  ,('B','20-Feb-2016')
  ,('C','05-Apr-2016')
  ,('D','31-Dec-2016')

Declare @month varchar(3) = ''
Declare @year varchar(4) = '2016'

select * 
from @yourtable
Where (isnull(@month,'') <> '' and 
(JoiningDate <= (SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,cast('01-'+@month+'-'+@year as date))+1,0)))))
or (isnull(@month,'') = '' and (Year(JoiningDate) =  @year))