SQL中DATEADD和DATEDIFF的使用方法
2016-02-21 23:50
671 查看
DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期,DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。
DATEADD() 函数在日期中添加或减去指定的时间间隔。
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
假设我们有下面这个 "Orders" 表:
现在,我们希望向 "OrderDate" 添加 2 天,这样就可以找到付款日期。
我们使用如下 SELECT 语句:
FROM Orders
[/code]
结果:
date也可以使用函数,比如今天是2016-02-21.
DATEDIFF() 函数返回两个日期之间的天数。
startdate 和 enddate 参数是合法的日期表达式。
datepart 参数可以是下列的值:
结果:
结果:
DATEADD和DATEDIFF可以组合获取指定时间。
本月的第一天:
本月的最后一天:
上个月的最后一天:
去年的最后一天:
2016-01-21的12个月前的那个月的第一天:
一年中指定周的第一天:
DECLARE @本年第一天 datetime,@本年第一天是星期几 int,@Week int
set @本年第一天=DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0))
set @本年第一天是星期几=DATEPART(dw,DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0)))
set @Week=1--今年第一周
select DATEADD(day,(@Week-1)*7-@本年第一天是星期几+2,@本年第一天)
SQL Server DATEADD() 函数
定义和用法
DATEADD() 函数在日期中添加或减去指定的时间间隔。语法
DATEADD(datepart,number,date)
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
datepart | 缩写 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小时 | hh |
分钟 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
纳秒 | ns |
实例
假设我们有下面这个 "Orders" 表:OrderId | ProductName | OrderDate |
---|---|---|
1 | 'Computer' | 2008-12-29 16:25:46.635 |
我们使用如下 SELECT 语句:
SELECT OrderId,[code]DATEADD(day,2,OrderDate)AS OrderPayDate
FROM Orders
[/code]
结果:
OrderId | OrderPayDate |
---|---|
1 | 2008-12-31 16:25:46.635 |
SQL Server DATEDIFF() 函数
定义和用法
DATEDIFF() 函数返回两个日期之间的天数。语法
DATEDIFF(datepart,startdate,enddate)
startdate 和 enddate 参数是合法的日期表达式。
datepart 参数可以是下列的值:
datepart | 缩写 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小时 | hh |
分钟 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
纳秒 | ns |
实例
例子 1
使用如下 SELECT 语句:SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate
结果:
DiffDate |
---|
1 |
例子 2
使用如下 SELECT 语句:SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate
结果:
DiffDate |
---|
-1 |
本月的第一天:
Select dateadd(ms,0,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) as 时间
本月的最后一天:
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
上个月的最后一天:
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) as 时间
去年的最后一天:
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))本年的最后一天:
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
2016-01-21的12个月前的那个月的第一天:
Select dateadd(mm,-12,DATEADD(mm, DATEDIFF(mm,0,'2016-01-21'), 0)) as 时间
一年中指定周的第一天:
DECLARE @本年第一天 datetime,@本年第一天是星期几 int,@Week int
set @本年第一天=DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0))
set @本年第一天是星期几=DATEPART(dw,DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0)))
set @Week=1--今年第一周
select DATEADD(day,(@Week-1)*7-@本年第一天是星期几+2,@本年第一天)
相关文章推荐
- 【转】Oracle两种临时表的创建与使用详解
- symfony2 如何测试与数据库交互的代码
- xampp新建数据库+数据库的导入导出
- oracle rac理解和用途扩展(转)
- MySQL 主从复制与读写分离概念及架构分析
- MySQL 启动时禁用了 InnoDB 引擎的解决方法
- 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
- mybatis实体类字段名与数据库字段名不匹配问题
- mongodb
- rsyslog+loganalyzer+mysql部署日志服务器
- oracle之约束解析
- Oracle中merge into的使用 (转)
- MySQL Access denied for user root@localhost 解决方法
- sqlite的系统表sqlite_master
- PowerDesigner16(PDM)pd生成数据库sql脚本
- MySQL分表、分区
- 用户方式登陆MongoDB
- kali 2.0中msf连接postgres数据库
- mysql-binlog日志恢复数据库
- 初建MongoDB