SQL使用dateadd和datediff


首先讲讲要用到的两个数据库函数,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+"' 进行符合条件的记录的筛选。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值