MySql时间操作
1.interval的说明
1.1、当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果4;
原理:10为被比较数,后面1,3,5,7为比较数,将后面四个依次与10比较,看后面数字组有多少个少于10,则返回其个数。前提是后面数字组为从小到大排列,否则返回结果0。
1.2、当关键词使用时,表示为设置时间间隔,常用在date_add()与date_sub()函数里,
如:interval 1 day ,解释为将时间间隔设置为1天。

2.语法示例:
2.1、今天

SELECT DATE_FORMAT(NOW(),’%Y-%m-%d 00:00:00’) AS ‘今天开始’;
SELECT DATE_FORMAT(NOW(),’%Y-%m-%d 23:59:59’) AS ‘今天结束’;

2.2、 昨天

SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), ‘%Y-%m-%d 00:00:00’) AS ‘昨天开始’;
SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), ‘%Y-%m-%d 23:59:59’) AS ‘昨天结束’;

2.3、本周

SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), ‘%Y-%m-%d 00:00:00’) AS ‘本周一’;
SELECT DATE_FORMAT( DATE_ADD(SUBDATE(CURDATE(), WEEKDAY(CURDATE())), INTERVAL 6 DAY), ‘%Y-%m-%d 23:59:59’) AS ‘本周末’;

2.4、 上周

SELECT DATE_FORMAT( DATE_SUB( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 WEEK), ‘%Y-%m-%d 00:00:00’) AS ‘上周一’;
SELECT DATE_FORMAT( SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 1), ‘%Y-%m-%d 23:59:59’) AS ‘上周末’;

2.5、 本月

SELECT DATE_FORMAT( CURDATE(), ‘%Y-%m-01 00:00:00’) AS ‘本月初’;
SELECT DATE_FORMAT( LAST_DAY(CURDATE()), ‘%Y-%m-%d 23:59:59’) AS ‘本月末’;

2.6、 上月

SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 MONTH), ‘%Y-%m-01 00:00:00’) AS ‘上月初’;
SELECT DATE_FORMAT( LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)), ‘%Y-%m-%d 23:59:59’) AS ‘上月末’;

2.7、 本年第一天

SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY)

concat(year(now()),’-01-01’)//当前年份的第一天
concat(year(now()),’-12-31’)//当前年份的最后一天

2.8、 月份处理

本月第一天
select date_add(curdate(), interval - day(curdate()) + 1 day);
今天是当月的第几天:SELECT DAYOFMONTH( NOW());

本月最后一天
select last_day(curdate());

上月第一天
select date_add(curdate()-day(curdate())+1,interval -1 month);

上月最后一天
select last_day(date_sub(now(),interval 1 month));

下月第一天
select date_add(curdate()-day(curdate())+1,interval 1 month);

下月最后一天
select last_day(date_sub(now(),interval -1 month));

本月天数
select day(last_day(curdate()));

上月今天的当前日期
select date_sub(curdate(), interval 1 month);
上月今天的当前时间 (时间戳)
select unix_timestamp(date_sub(now(),interval 1 month));

获取当前时间与上月时间的天数
select datediff(curdate(), date_sub(curdate(), interval 1 month));

2.9、 日期处理

----时间差换算
SELECT
TIME_TO_SEC(TIMEDIFF(‘2018-09-30 19:38:45’, ‘2018-08-23 10:13:01’)) AS DIFF_SECOND1, – 秒
UNIX_TIMESTAMP(‘2018-09-30 19:38:45’)-UNIX_TIMESTAMP(‘2018-08-23 10:13:01’) AS DIFF_SECOND2, – 秒
TIMESTAMPDIFF(SECOND,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_SECOND3, – 秒
TIMESTAMPDIFF(MINUTE,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_MINUTE, – 分
TIMESTAMPDIFF(HOUR,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_HOUR, – 小时
TIMESTAMPDIFF(DAY ,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_DATE1, – 天
DATEDIFF(‘2018-09-30 19:38:45’,‘2018-08-23 10:13:01’) AS DIFF_DATE2, – 天
TIMESTAMPDIFF(MONTH,‘2018-08-23 10:13:01’,‘2018-09-25 19:38:45’) AS DIFF_MONTH, – 月
TIMESTAMPDIFF(YEAR,‘2018-08-23 10:13:01’,‘2020-07-25 19:38:45’) AS DIFF_YEAR – 年
FROM DUAL;

日期增加年,月,天,小时,分,秒
select date_add(日期, interval 1 day); 日期加天
select date_add(日期, interval 1 hour); 日期加小时
select date_add(日期, interval 1 minute); 日期加分
select date_add(日期, interval 1 second);日期加秒
select date_add(日期, interval 1 microsecond); 日期加微秒
select date_add(日期, interval 1 week); 日期加周
select date_add(日期, interval 1 month); 日期加月
select date_add(日期, interval 1 quarter); 日期加季度
select date_add(日期, interval 1 year); 日期加年

日期普遍处理
当年第一天:
SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY);

当年最后一天:
SELECT concat(YEAR(now()),’-12-31’);

当前week的第一天:
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY);

当前week的最后一天:
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 5 DAY);

前一week的第一天:
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 8 DAY);

前一week的最后一天:
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 2 DAY);

前两week的第一天:
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 15 DAY);

前两week的最后一天:
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 9 DAY);

当前month的第一天:
SELECT concat(date_format(LAST_DAY(now()),’%Y-%m-’),‘01’);

当前month的最后一天:
SELECT LAST_DAY(now());

前一month的第一天:
SELECT concat(date_format(LAST_DAY(now() - interval 1 month),’%Y-%m-’),‘01’);

前一month的最后一天:
SELECT LAST_DAY(now() - interval 1 month);

前两month的第一天:
SELECT concat(date_format(LAST_DAY(now() - interval 2 month),’%Y-%m-’),‘01’);

前两month的最后一天:
SELECT LAST_DAY(now() - interval 2 month);

当前quarter的第一天:
select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-3 month),’%Y-%m-’),‘01’);

当前quarter的最后一天:
select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-1 month);

前一quarter的第一天:
select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-6 month),’%Y-%m-’),‘01’);

前一quarter的最后一天:
select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-4 month);

前两quarter的第一天:
select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-9 month),’%Y-%m-’),‘01’);

前两quarter的最后一天:
select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-7 month);

时间处理及interval函数运用的更多相关文章

  1. MySQL interval()函数

    INTERVAL(N,N1,N2,N3,..........) INTERVAL()函数进行比较列表(N,N1,N2,N3等等)中的N值.该函数如果N<N1返回0,如果N<N2返回1,如果 ...

  2. Oracle 时间,日期 类型函数及参数详解

    ORACLE字符数字日期之间转化   Java代码   24 小时的形式显示出来要用 HH24       select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss' ...

  3. MySQL中关于日期、时间的数据类型和函数

    一.日期相关的数据类型 1.datetime 占用8字节,既显示了日期,又显示了时间.其表示的日期范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59” 2.da ...

  4. MySQL 使用 比较函数 INTERVAL() 函数 实现数据按区间分组

    首先看一下它的定义: INTERVAL(N,N1,N2,N3,..........) INTERVAL()函数进行比较列表(N1,N2,N3等等)中的N值.该函数如果N<N1返回0,如果N< ...

  5. ruby -- 基础学习(七)时间的内置函数和格式说明

        Rails -- 时间的内置函数和格式说明 FROM:http://www.douban.com/note/99064603/ time = Time.now #获得当前时间 time.gmt ...

  6. Delphi获取当前系统时间(使用API函数GetSystemTime)

    在开发应用程序时往往需要获取当前系统时间.尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题. 在<融会贯通--Delphi4.0实战技巧>(以下简称“该书” ...

  7. SQL-27 给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。 提示:在sqlite中获取datetime时间对应的年份函数为strftime('%Y', to_date)

    题目描述 给出每个员工每年薪水涨幅超过5000的员工编号emp_no.薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列. 提示:在s ...

  8. 3 EventTime 事件时间类和TimeNow函数——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 这里是时间相关类的第三个部分,也是最后一个部分. EventTime 事件时间类 这个类和Dela ...

  9. 6、SQL基础整理(日期时间数据类型,转换函数)

    日期时间数据类型 *系统常量: @@DATEFIRST(返回当前时间) DATEADD 增加时间 语法:DATEADD (datepart , number , date ) select DATEA ...

  10. mysql中的timestamp类型时间比较:unix_timestamp函数

    在mysql中,某字段的类型设置为了timestamp,那么我们现在希望取出指定时间段的记录,该如何做呢? 在php中有time()和strtotime()来进行日期和时间戳的格式化,而在mysql中 ...

随机推荐

  1. 一台服务器部署ShareWAF,后面接多台Web服务器,该如何配置?

    ShareWAF做为WAF,可以不只是WAF,还可以充当负载或路由的角色. 比如可以有这样一种部署架构: 在此结构中,ShareWAF部署于一台服务器,后面接多台独立的WEB服务器. ShareWAF ...

  2. 不可忽略的.gitignore_global

    会不会很奇怪,本地的代码运行没有问题,以为自己提交到远程仓库了 但是别人下载下来却没有,有没有可能是你根本没提交上去,对了,你真的有可能没提交上去 你本地这个文件是灰色的,确实没有提交上去,但是项目中 ...

  3. Android FragmentTabHost底部选项卡实现

    记录一下底部选项卡的实现,很常见的代码,大神勿嘲笑. 说一下思路,在activity底部要放上FragmentTabHost放上选项,几个无所谓,每个选项卡都对应一个fragment,点击选项卡颜色改 ...

  4. Hanlp 在Python环境中安装、介绍及使用

    Hanlp HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善.性能高效.架构清晰.语料时新.可自定义的特点. 功能:中文分词 词性标 ...

  5. mathjs 数字处理

    // mathjs 四舍五入取整 val:值export function roundingInt(val) { if (val) { return math.round(val, 0) }}// m ...

  6. byte最高位

    /** * 将byte转换为一个长度为8的byte数组,数组每个值代表bit */public static byte[] replaceSpace(Byte b){ byte[] array=new ...

  7. Burp学院-信息泄露

    1.Information disclosure in error messages错误消息中的信息泄露 GET /product?productId=1 发送到Repeater. 修改product ...

  8. Unity组件Toggle详解

    1.首先先搭建UI(如下图) 2.如果实现单选的功能需要在Image上面挂载ToggleGroup脚本组件 2.2 选中三个Toggle把ToggleGroup拖到如下图位置即可 2.AllowSwi ...

  9. LAN8720 调试笔记

    因为项目需要开始研究LAN8720,还没有仔细研究芯片手册就根据网上能找到的原理图画了第一版电路 调试整整花了我2天半,期间多亏硬汉哥的耐心解答.下面是我调试过程中遇到的一些坑   1.TPTX.TO ...

  10. centos6.5最小安装不能联网

    因为个人需要,在一台笔记本安装centos6.5最小安装时遇到了无法有线联网,后面经过了几个小时的处理 总算理清楚并解决了这个问题.亲测有效而不是转载! 如上图所示 处理这个问题颇有感受,在网上找了很 ...