DATEDIFF 和 DATEADD
/*
DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数
语法 DATEDIFF(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
interval 参数的设定值如下
yyyy 年
q,qq 季
m,mm 月
y 一年的日数
d,dd 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒
DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期
语法 DATEADD (datepart , number , date )
datepart 参数的设定值如下
year yy,yyyy 年
quarter qq,q 季度
month mm,m 月
dayofyear dy,y 一年的日数
day dd,d 日
week wk,ww 周
weekday dw,w 周的日数
hour hh 时
minute mi,n 分
second ss,s 秒
millisecond ms 毫秒
microsecond mcs 微妙
nanosecond ns 纳秒 0相当于'1900-1-1' 使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。
你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的日期之间有多少时间间隔,
或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。
理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。
*/
--本月第一天
-- 我将告诉你如何从当前日期去这个月的最后一天。
-- 每一个例子都将通过计算当前的时间间隔,然后进行加减来得到想要计算的日期 SELECT DATEDIFF(mm, 0, GETDATE())
--本月第一天
--先看1900-1-1距离当前时间有n个月,然后在让1900-1-1加上n月则等于当月第一天
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0);
--本周第一天
SELECT DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0);
--本年第一天
SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0);
--本季度第一天
SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0);
--当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0);
--上个月的最后一天
--它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要记住,在SqlServer中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间
SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0));
--去年的最后一天
SELECT DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0));
--本月的最后一天
SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0));
--本年的最后一天
SELECT DATEADD(ms,-3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0));
--本月的第一个星期一
SELECT DATEADD(wk,DATEDIFF(wk, 0, DATEADD(dd, 6 - DATEPART(DAY, GETDATE()), GETDATE())), 0);
--今天的所有数据:
SELECT * FROM [Table] WHERE DATEDIFF(dd, [datetime类型字段], GETDATE()) = 0; --昨天的所有数据:
SELECT * FROM [Table] WHERE DATEDIFF(dd, [datetime类型字段], GETDATE()) = 1; --7天内的所有数据:
SELECT * FROM [Table] WHERE DATEDIFF(dd, [datetime类型字段], GETDATE())< = 7; --30天内的所有数据:
SELECT * FROM [Table] WHERE DATEDIFF(dd, [datetime类型字段], GETDATE())< = 30; --本月的所有数据:
SELECT * FROM [Table] WHERE DATEDIFF(mm, [datetime类型字段], GETDATE()) = 0; --本年的所有数据:
SELECT * FROM [Table] WHERE DATEDIFF(yy, [datetime类型字段], GETDATE()) = 0; --查询今天是今年的第几天:
SELECT DATEPART(DAYOFYEAR, GETDATE()); --查询今天是本月的第几天:
--1.
SELECT DATEPART(dd, GETDATE());
--2.
SELECT DAY(GETDATE()); --查询本周的星期一日期是多少 (注意:指定日期不能是周日,如果是周日会计算到下周一去。所以如果是周日要减一天)
SELECT DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0); --查询昨天日期:
SELECT CONVERT(CHAR, DATEADD(DD, -1, GETDATE()), 111); --111是样式号,(100-114) --查询本月第一天日期:
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) AS firstday; --查询本月最后一天日期:
SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0)) as lastday; --修改-3的值会有相应的变化 --本月有多少天:
SELECT DATEPART(dd, DATEADD(dd, -1, DATEADD(mm,1, CAST((CAST(YEAR(GETDATE()) AS VARCHAr) + '-' + CAST(MONTH(GETDATE()) AS VARCHAR)+'-01' ) AS DATETIME )))); --求两个时间段相差几天:
SELECT DATEDIFF(day, '2012/8/1',' 2012/8/20') as daysum;
--在指定的日期上±N天:
SELECT CONVERT(CHAR,DATEADD(dd,1,'2012/8/20'),111) as riqi; --输出2012/8/21 --在指定的日期上±N分钟:
SELECT DATEADD(mi, -15, GETDATE()); --查询当前时间15分钟之前的日期
DATEDIFF 和 DATEADD的更多相关文章
- C# DateDiff与DateAdd
原文地址:http://www.wlm.so/Article/Detail/lmb49q5hxpqyi00000 刚刚在百度上搜C#里面的DateDiff,一看吓一跳,C#没有这个函数. 还有各种自定 ...
- DATEADD和DATEDIFF函数、其他日期处理方法 、已打开的端口、FORMAT函数
DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.FORMAT函数 DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.Format函数 KeyLife富翁笔 ...
- SQL Server 日期的加减函数: DATEDIFF DATEADD
SQL Server 日期的加减函数: DATEDIFF DATEADD DATEDIFF: 返回跨两个指定日期的日期边界数和时间边界数, 语法:DATEDIFF ( datepart , st ...
- sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)(备忘)
Learn From : http://bjtdeyx.iteye.com/blog/1447300 最常见的sql日期查询的语句 --查询当天日期在一周年的数据 ) --查询当天的所有数据 ) -- ...
- SQL DATEDIFF语法及时间函数 Sql 查询当天、本周、本月记录
SQL DATEDIFF语法及时间函数 Sql 查询当天.本周.本月记录 转:http://blog.csdn.net/Json1204/article/details/7863801?locatio ...
- 你真的会玩SQL吗?实用函数方法汇总
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- SQL函数说明大全
一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...
- SQL 查找重复项及批量修改数据成固定格式
1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from ...
- 【原创】SQL常用函数
--值类型转换 ) --时间差 ,GETDATE()),GETDATE()) --加减指定时间 ,GETDATE()) --获取系统日期 select GETDATE() --生成不重复Id sele ...
随机推荐
- Java-使用IO流对大文件进行分割和分割后的合并
有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...
- selenium webdriver 截屏操作
有时候我们需要进行截屏操作,特别是遇到一些比较重要的页面信息(出现错误)或者出现不同需要进行对比时, 我们就需要对正在处理的页面进行截屏! 未经作者允许,禁止转载! package test_wait ...
- http-equiv="Refresh" 实现定时刷新页面
***.html自动跳转文件代码如下: <HTML> <HEAD><META http-equiv="Refresh" content="5 ...
- linux常用命令:tr 命令
tr 命令实现字符转换功能,其功能类似于 sed 命令,但是,tr 命令比 sed 命令简单.也就是说,tr 命令能实现的功能,sed 命令都可以实现.尽管如此,tr 命令依然是 Linux 系统下处 ...
- 干货:Java多线程详解(内附源码)
线程是程序执行的最小单元,多线程是指程序同一时间可以有多个执行单元运行(这个与你的CPU核心有关). 在java中开启一个新线程非常简单,创建一个Thread对象,然后调用它的start方法,一个 ...
- Python Web学习笔记之SOCK_STREAM和SOCK_DGRAM
SOCK_STREAM 数据流 一般是tcp/ip协议的编程 有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送 SOCK_DGRAM 数据包 udp协议网络编程 ...
- Android 拖动条 和 Handle
- 20145329 《网络对抗技术》浏览器MS11_050安全漏洞攻击
两台虚拟机: kali ip:192.168.96.130 windows xp sp3(包含IE7)ip:192.168.96.128 1.在kali终端中开启msfconsole. 2.进入漏洞模 ...
- 0x30、0x37
1.write_date(0x30+shi)加0x30是什么意思 答: 将数字0-9转化为字符'0'-'9' 1.write_date(0x37+bai)加0x37是什么意思 答: 将大于9的数字转化 ...
- win7 + MySQL 5.6.35 免安装版部署
之前项目开发一直用的asp.net技术,所以数据库自然而然的就用的Sql Server了,最近想着手看一下MySQL数据库,部署免安装版的MySQL的过程记录一下. 准备工作:window 7 6 ...