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天
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()))