Sql server 在SQL server中使用某些条件获取日期

Sql server 在SQL server中使用某些条件获取日期,sql-server,Sql Server,我想要的是emp\u mst表中的EmployeeName,其中包含以下条件:- 所有员工姓名自当前日期起的最后7个月,也少于15天 从下面的查询中,我得到了上个月的结果,但我希望这是过去6个月的结果 select DATEADD(month, -1, GETDATE()- 15) 我正在使用SQLServer2008 更新程序 SELECT * FROM (SELECT CASE WHEN (SELECT Isnull(Sum(total_day), 0

我想要的是
emp\u mst
表中的
EmployeeName
,其中包含以下条件:-

  • 所有
    员工姓名
    当前日期起的最后7个月
    ,也少于
    15天
  • 从下面的查询中,我得到了上个月的结果,但我希望这是过去6个月的结果

    select DATEADD(month, -1, GETDATE()- 15)
    

    我正在使用SQLServer2008

    更新程序

    SELECT * FROM (SELECT CASE 
                     WHEN (SELECT Isnull(Sum(total_day), 0) 
                           FROM   xxacl_erp_ab_pl_count_view 
                           WHERE  emp_card_no = em.emp_card_no) > 7 THEN 
                     'DOC Exteded By 1 month. Reason:- Taken leave=' 
                     + CONVERT(VARCHAR, (SELECT Sum(total_day) FROM 
                     xxacl_erp_ab_pl_count_view 
                     WHERE emp_card_no = em.emp_card_no)) 
                     + 
    ' which is > 7. Actual DOC=' 
              + CONVERT(VARCHAR, Dateadd(mm, em.probation_period, em.date_of_joining), 103) 
              + '' 
              ELSE 'N/A' 
            END Remark, 
            em.* 
     FROM   emp_mst em 
            LEFT JOIN company_mst comp 
                   ON em.comp_mkey = comp.mkey 
                      AND comp.fa_year = 2008 
                      AND company_name NOT LIKE '%HELIK%' 
     WHERE  em.status IN ( 'A' ) --and em.emp_type='E' 
            AND em.emp_card_no != 9999 
            AND em.resig_date IS NULL 
            AND CONVERT(DATETIME, em.date_of_joining, 103) >= 
                CONVERT(DATETIME, 
                Dateadd(m, -6, Getdate()), 103) 
            AND em.emp_card_no NOT IN (SELECT emp_card_no 
                                       FROM   p_emp_confirmation_hdr 
                                       WHERE  delete_flag = 'N' 
                                              AND hr_flag = 'Y')) pp 
    WHERE  remark = 'N/A' 
    
    这将向您展示在6个月前到15天前添加的员工,例如,今天运行将为您提供2014-12-24和2015-06-09范围内的员工

    编辑:对于SQL Server 2005及更早版本:

    SELECT [emp_name] 
    FROM [TABLE] 
    WHERE [DateColumn] BETWEEN DATEADD(MONTH, -6, cast(convert(char(11), getdate(), 113) as datetime)) 
        AND DATEADD(DAY, -15, cast(convert(char(11), getdate(), 113) as datetime))
    

    强制转换为最新,以避免使用时间戳进行计算

    WHERE
      yourdate >= dateadd(m, -6, datediff(d, 15, getdate())) and 
      yourdate <  dateadd(d, -15, datediff(d, 0, getdate()))
    
    在哪里
    yourdate>=dateadd(m,-6,datediff(d,15,getdate())和
    yourdate
    已更改答案,以便使用SQLServer2005或更早版本进行调整


    在“2014-11-24”和“2014-12-24”之间的
    中增加了15天的时间间隔

    缺少了一个语法
    如果我想在“2014-11-24”和“2014-12-24”之间的
    这一个月的时间间隔
    可能与您刚才编写的内容类似,但是计算:
    在DATEADD(月-7,GETDATE())和DATEADD(月-6,GETDATE())之间
    error
    关键字“BETWEEN”附近的语法不正确。
    因为cast(getdate()as date)可从sqlserver 2008或更高版本运行。您必须使用较旧的兼容级别。是否可以包含一些数据和预期输出?@t-clausen.dk:我希望返回加入公司六个月的
    员工名单。还有一个条件是,如果他们在15日或15日之前加入,他们将在本月收到确认书,否则将在下个月收到确认书。如果您还需要什么,请告诉我基本上在6个月前和15天前?@t-clausen.dk:aah是的,完全正确。@t-clausen.dk:请参阅我编辑的问题获取错误为
    Msg 243,级别16,状态1,行1类型日期不是定义的系统类型。Msg 243,级别16,状态1,第1行类型日期不是已定义的系统类型。
    SQL Server 2008中添加了
    日期
    类型(这是您根据原始问题使用的类型)。你确定你没有使用SQL Server 2005吗?@EdB:是的,我交叉检查了一下,我觉得2005年的日期转换比我使用的版本更合适。它更干净。@ChrisSchubert:是的,这个更好,顺便说一句,我从两个查询中得到了相同的结果。我希望在程序中实现这一点,请参阅我更新的程序问题
    WHERE
      yourdate >= dateadd(m, -6, datediff(d, 15, getdate())) and 
      yourdate <  dateadd(d, -15, datediff(d, 0, getdate()))