SQL查询XX天内员工的生日
2016-11-26 11:42
246 查看
SQL查询XX天内员工的生日
1. 查询一周
SELECT FullName,(dateadd(year,datediff(year,birthday,getdate()),birthday)) AS Nbirthday
FROM PMEmployeesInfo
WHERE (dateadd(year,datediff(year,birthday,getdate()),birthday)) BETWEEN getdate() AND getdate()+7
2.自定义时间段
SELECT FullName,(dateadd(year,datediff(year,birthday,getdate()),birthday))AS Nbirthday
FROM PMEmployeesInfo
WHERE
(dateadd(year,datediff(year,birthday,'2012-12-05'),birthday) BETWEEN '2012-12-05' AND '2013-01-14')
or
(dateadd(year,datediff(year,birthday,'2013-01-14'),birthday) BETWEEN '2012-12-05' AND '2013-01-14')
ORDER BY Nbirthday ASC
3 函数解释
2012-12-05是起始日期,2013-01-14是结束日期
datediff(year,birthday,getdate())这句意思是两个日期相减得到年数
dateadd(year,datediff(year,birthday,getdate()),birthday)这句意思是将birthday的年份加上相减的年数
如果birthday是1989-05-05,利用这句话得到的就是2013-05-05
自定义时间段的好处不仅仅是自定义,最重要的是解决了跨年时查询不准的情况,如想查询2012年12月20号到2013年1月20号的人员生日。
转摘自:http://blog.163.com/heaver_1989/blog/static/1846043382013010102442454/
整理: 查多少天内生日的所有信息(正数往后算,负数往前算)
SELECT GETDATE(),DATEADD(day,-40,getdate()),birthday ,(dateadd(year,datediff(year,birthday,getdate()),birthday))AS Nbirthday ,
DATEADD(year,datediff(year,birthday,DATEADD(day,-40,getdate())),birthday),
datediff(year,birthday,getdate()),DATEDIFF(year,birthday,DATEADD(day,-40,getdate()))
FROM Table
where ISNULL(birthday,'') <> ''
AND
(
--天数为正
(dateadd(year,datediff(year,birthday,getdate()),birthday)) BETWEEN GETDATE() AND DATEADD(day,-40,getdate())
OR
(dateadd(year,datediff(year,birthday,DATEADD(day,-40,getdate())),birthday)) BETWEEN GETDATE() AND DATEADD(day,-40,getdate())
OR
--天数为负
(dateadd(year,datediff(year,birthday,getdate()),birthday)) BETWEEN DATEADD(day,-40,getdate())and GETDATE()
OR
(dateadd(year,datediff(year,birthday,DATEADD(day,-40,getdate())),birthday)) BETWEEN DATEADD(day,-40,getdate()) AND GETDATE()
)
1. 查询一周
SELECT FullName,(dateadd(year,datediff(year,birthday,getdate()),birthday)) AS Nbirthday
FROM PMEmployeesInfo
WHERE (dateadd(year,datediff(year,birthday,getdate()),birthday)) BETWEEN getdate() AND getdate()+7
2.自定义时间段
SELECT FullName,(dateadd(year,datediff(year,birthday,getdate()),birthday))AS Nbirthday
FROM PMEmployeesInfo
WHERE
(dateadd(year,datediff(year,birthday,'2012-12-05'),birthday) BETWEEN '2012-12-05' AND '2013-01-14')
or
(dateadd(year,datediff(year,birthday,'2013-01-14'),birthday) BETWEEN '2012-12-05' AND '2013-01-14')
ORDER BY Nbirthday ASC
3 函数解释
2012-12-05是起始日期,2013-01-14是结束日期
datediff(year,birthday,getdate())这句意思是两个日期相减得到年数
dateadd(year,datediff(year,birthday,getdate()),birthday)这句意思是将birthday的年份加上相减的年数
如果birthday是1989-05-05,利用这句话得到的就是2013-05-05
自定义时间段的好处不仅仅是自定义,最重要的是解决了跨年时查询不准的情况,如想查询2012年12月20号到2013年1月20号的人员生日。
转摘自:http://blog.163.com/heaver_1989/blog/static/1846043382013010102442454/
整理: 查多少天内生日的所有信息(正数往后算,负数往前算)
SELECT GETDATE(),DATEADD(day,-40,getdate()),birthday ,(dateadd(year,datediff(year,birthday,getdate()),birthday))AS Nbirthday ,
DATEADD(year,datediff(year,birthday,DATEADD(day,-40,getdate())),birthday),
datediff(year,birthday,getdate()),DATEDIFF(year,birthday,DATEADD(day,-40,getdate()))
FROM Table
where ISNULL(birthday,'') <> ''
AND
(
--天数为正
(dateadd(year,datediff(year,birthday,getdate()),birthday)) BETWEEN GETDATE() AND DATEADD(day,-40,getdate())
OR
(dateadd(year,datediff(year,birthday,DATEADD(day,-40,getdate())),birthday)) BETWEEN GETDATE() AND DATEADD(day,-40,getdate())
OR
--天数为负
(dateadd(year,datediff(year,birthday,getdate()),birthday)) BETWEEN DATEADD(day,-40,getdate())and GETDATE()
OR
(dateadd(year,datediff(year,birthday,DATEADD(day,-40,getdate())),birthday)) BETWEEN DATEADD(day,-40,getdate()) AND GETDATE()
)
相关文章推荐
- 查询某段时间内过生日的员工名单的SQL语句
- 查询某段时间内过生日的员工名单的SQL语句
- SQL(收藏)查询每个部门工资前三名的员工信息
- 一条SQL语句实现查询每个部门中年龄最大的员工信息
- oracle中SQL根据生日日期查询年龄的方法
- SQL查询--列出所有员工的姓名及其直接上级的姓名
- SQL查询--列出薪资比“SMITH”多的所有员工
- SQL 中在表内查询近 3 天内生日的学生信息(注意闰年的情况)
- SQL查询判断员工迟到
- sql查询今天生日的人
- SQL查询--列出受雇日期早于直接上级的所有员工
- 一道关于员工与部门查询的SQL笔试题
- sql查询员工数>10的部门的所有员工信息(emp.姓名,emp.年龄,enp.部门,gender_info.性别)
- 关于员工与部门查询的SQL笔试题
- oracle中SQL根据生日日期查询年龄的方法
- mysql 查询年龄段,星座以及最近7天生日的sql
- 公司员工数据查询(SQL)
- SQL笔试题:公司员工与部门查询
- 一道关于员工与部门查询的SQL笔试题
- SQL查询--列出至少有一个员工的部门