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 ...
随机推荐
- JavaScrip总体
js: 简单对象: 数字 | 字符串 | 这三个像对象,有方法,但不可变 布尔值 | null undefined 对象:无类型,k-v对集合:函数.数组.REG.... JavaScript是一种l ...
- [LeetCode] 717. 1-bit and 2-bit Characters_Easy
We have two special characters. The first character can be represented by one bit 0. The second char ...
- 机器学习理论基础学习3.5--- Linear classification 线性分类之朴素贝叶斯
一.什么是朴素贝叶斯? (1)思想:朴素贝叶斯假设 条件独立性假设:假设在给定label y的条件下,特征之间是独立的 最简单的概率图模型 解释: (2)重点注意:朴素贝叶斯 拉普拉斯平滑 ...
- javascript按字节截取标题中字符串
在网页展示中经常会碰到,标题过长,需要截取字符串,用CSS的实现的话各种兼容问题,下面为大家介绍下javascript如何按字节截取字符串 做为一个前端开发人员在网页展示中经常会碰到,标题过长,需要截 ...
- 浅谈Java中的初始化和清理
引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...
- python 读写压缩文件
gzip 和bz2 模块可以很容易的处理这些文件.两个模块都为open() 函数提供了另外的实现来解决这个问题.比如,为了以文本形式读取压缩文件,可以这样做: # gzip compression i ...
- Hive配置文件中配置项的含义详解(收藏版)
这里面列出了hive几乎所有的配置项,下面问题只是说出了几种配置项目的作用.更多内容,可以查看内容 问题导读: 1.hive输出格式的配置项是哪个? 2.hive被各种语言调用如何配置? 3.hive ...
- linux常用命令:rcp 命令
rcp代表"remote file copy"(远程文件拷贝). 1.命令格式: rcp [参数] [源文件] [目标文件] 2.命令功能: 功能: rcp命令用于在计算机之间拷 ...
- seo标题关键字描述字数限制Title,keywords,description长度最长多长 ?
seo标题关键字描述字数限制 seo优化各个搜索引擎收录Title,keywords,description长度最长多长 ?SEO网站优化中Title标签的作用为重中之重,好的Title也就成功了一半 ...
- DBMS_OUTPUT.PUT_LINE()方法的简单介绍
1.最基本的DBMS_OUTPUT.PUT_LINE()方法. 随便在什么地方,只要是BEGIN和END之间,就可以使用DBMS_OUTPUT.PUT_LINE(output);然而这会有一个问题,就 ...