查询某段时间内过生日的员工名单的SQL语句
2008-11-28 18:35
357 查看
首先讲讲要用到的两个数据库函数,dateadd和datediff函数。
dateadd函数:DateAdd(interval, number, date)返回的是一个日期数据,函数的三个形参都是必要。
interval表示时间的间隔可以是yy(表示年),mm(表示月),dd(表示日),qq(表示季度),ww(表示周);
number表示间隔的数值,正数表示日期数据date的未来,负数表示日期数据大特的从前。
date为日期数据,一般就是数据表里面的某个日期字段如birthday生日字段。
示例 Select dateadd(dd,3,'2008-10-05') 得到的结果就是2008-10-08.
datediff函数:DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) 返回的是一个数值,这个数值表示date1和date2之间相隔时间间隔interval的数值。
interval表示时间间隔,可以是yy(表示年),mm(表示月),dd(表示日),qq(表示季度),ww(表示周),hh(表示小时),n(表示分钟),s(表示秒)
date1, date2是计算中进行计算的两个日期
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。
示例:Select datediff(dd,'2008-10-05','2008-10-08') 结果为3
了解以上两个函数的用法,我们就可以利用它们来求得某段时间内过生日的员工名单,如存放员工信息的表为StaffBasic,表中员工生日字段名为Birthday,BeginTime变量存储从前台得到的查询生日的开始时间,EndTime变量存储从前台得到的查询生日的结束时间,则查询语句SQL的写法如下:
Select * From StaffBasic where
(dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday) between '"+BeginTime+"' and '"+EndTime+"'
or
dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday) between '"+BeginTime+"' and '"+EndTime+"')
分析一下这个语句的含义:
(dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday)和
dateadd(year,datediff(year,birthday,'"+EndTime+"'),birthday)
的作用是把所有的员工的出生的年份改成是查询中输入日期的年份,因为前台查询输入的是两个日期,这两个日期可能年份不同,如前台查询的是2007-12-20到2008-1-20这个时间段的过生日员工名单,所以需要考虑两种年份情况,然后通过between '"+BeginTime+"' and '"+EndTime+"' 进行符合条件的记录的筛选。
dateadd函数:DateAdd(interval, number, date)返回的是一个日期数据,函数的三个形参都是必要。
interval表示时间的间隔可以是yy(表示年),mm(表示月),dd(表示日),qq(表示季度),ww(表示周);
number表示间隔的数值,正数表示日期数据date的未来,负数表示日期数据大特的从前。
date为日期数据,一般就是数据表里面的某个日期字段如birthday生日字段。
示例 Select dateadd(dd,3,'2008-10-05') 得到的结果就是2008-10-08.
datediff函数:DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) 返回的是一个数值,这个数值表示date1和date2之间相隔时间间隔interval的数值。
interval表示时间间隔,可以是yy(表示年),mm(表示月),dd(表示日),qq(表示季度),ww(表示周),hh(表示小时),n(表示分钟),s(表示秒)
date1, date2是计算中进行计算的两个日期
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。
示例:Select datediff(dd,'2008-10-05','2008-10-08') 结果为3
了解以上两个函数的用法,我们就可以利用它们来求得某段时间内过生日的员工名单,如存放员工信息的表为StaffBasic,表中员工生日字段名为Birthday,BeginTime变量存储从前台得到的查询生日的开始时间,EndTime变量存储从前台得到的查询生日的结束时间,则查询语句SQL的写法如下:
Select * From StaffBasic where
(dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday) between '"+BeginTime+"' and '"+EndTime+"'
or
dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday) between '"+BeginTime+"' and '"+EndTime+"')
分析一下这个语句的含义:
(dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday)和
dateadd(year,datediff(year,birthday,'"+EndTime+"'),birthday)
的作用是把所有的员工的出生的年份改成是查询中输入日期的年份,因为前台查询输入的是两个日期,这两个日期可能年份不同,如前台查询的是2007-12-20到2008-1-20这个时间段的过生日员工名单,所以需要考虑两种年份情况,然后通过between '"+BeginTime+"' and '"+EndTime+"' 进行符合条件的记录的筛选。
相关文章推荐
- 查询某段时间内过生日的员工名单的SQL语句
- SQL比较时间查询语句
- SQL比较时间查询语句
- sql语句中日期时间格式化查询
- sql语句中日期时间格式化查询
- mysql 查询指定日期时间内sql语句实现原理与代码
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- SQL语句关于时间的查询小心得,希望大家给点意见
- sql 时间比较 查询语句
- SQL查询执行某条SQL语句所花费的时间
- (转)SQLServer_T-SQL 语句执行时间的查询
- mybatis查询sql:where语句“查询时间字段书写问题”引发的索引失效
- oracel sql语句:查询时间段中开始时间与结束时间相同的数据
- (转载)PHP怎么获取MySQL执行sql语句的查询时间
- mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。 . .
- SQL查询XX天内员工的生日
- Oracle查询Sql语句中的时间格式转化
- 执行sql查询,并查看语句执行花费时间
- 查询每一个执行SQL语句的时间(创建hash分区)
- sql时间查询语句