时间处理及interval函数运用
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函数运用的更多相关文章
- MySQL interval()函数
INTERVAL(N,N1,N2,N3,..........) INTERVAL()函数进行比较列表(N,N1,N2,N3等等)中的N值.该函数如果N<N1返回0,如果N<N2返回1,如果 ...
- Oracle 时间,日期 类型函数及参数详解
ORACLE字符数字日期之间转化 Java代码 24 小时的形式显示出来要用 HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss' ...
- MySQL中关于日期、时间的数据类型和函数
一.日期相关的数据类型 1.datetime 占用8字节,既显示了日期,又显示了时间.其表示的日期范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59” 2.da ...
- MySQL 使用 比较函数 INTERVAL() 函数 实现数据按区间分组
首先看一下它的定义: INTERVAL(N,N1,N2,N3,..........) INTERVAL()函数进行比较列表(N1,N2,N3等等)中的N值.该函数如果N<N1返回0,如果N< ...
- ruby -- 基础学习(七)时间的内置函数和格式说明
Rails -- 时间的内置函数和格式说明 FROM:http://www.douban.com/note/99064603/ time = Time.now #获得当前时间 time.gmt ...
- Delphi获取当前系统时间(使用API函数GetSystemTime)
在开发应用程序时往往需要获取当前系统时间.尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题. 在<融会贯通--Delphi4.0实战技巧>(以下简称“该书” ...
- 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 ...
- 3 EventTime 事件时间类和TimeNow函数——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 这里是时间相关类的第三个部分,也是最后一个部分. EventTime 事件时间类 这个类和Dela ...
- 6、SQL基础整理(日期时间数据类型,转换函数)
日期时间数据类型 *系统常量: @@DATEFIRST(返回当前时间) DATEADD 增加时间 语法:DATEADD (datepart , number , date ) select DATEA ...
- mysql中的timestamp类型时间比较:unix_timestamp函数
在mysql中,某字段的类型设置为了timestamp,那么我们现在希望取出指定时间段的记录,该如何做呢? 在php中有time()和strtotime()来进行日期和时间戳的格式化,而在mysql中 ...
随机推荐
- 【4】Postman之Tests(断言)
简介:使用postman完成请求后,验证返回结果,会用到tests断言.官方提供了很多可以直接使用的方法~ 接下来主要介绍这些方法是如何使用. 1. 变量相关: Get an environment ...
- 从零开始升级基于RuleBased的聊天机器人
这里记录从最基础的基于规则的聊天机器人,升级到基于逻辑的机器人,再升级到调用Google提供的API来让机器人能说.会听普通话. 最基本的完全基于规则式的问答:问什么就答什么,幼儿园水平. impor ...
- MDK GCC调试
openocd调试 https://blog.csdn.net/chunyexixiaoyu/article/details/120448515
- kubeSphere+kubernetes 集群更新证书
模拟问题点 使用kubernetes时错误提示 yang@master:~$ kubectl get nodes Unable to connect to the server: x509: cert ...
- C# 日期获得一天的起始时间
dateTimePicker1.Value = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")); ...
- C++中map用法详解(转)
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数: map<stri ...
- GPS网络授时仪(网络授时服务器)成功投运攀枝花市中西医结合医院
GPS网络授时仪(网络授时服务器)成功投运攀枝花市中西医结合医院 GPS网络授时仪(网络授时服务器)成功投运攀枝花市中西医结合医院 北京华人开创科技发展有限公司 技术交流15901092122岳峰 概 ...
- PHP的session文件包含与竞争
PHP的session文件包含与竞争 lamaper@qq.com lamaper - 博客园 (cnblogs.com) 一.什么是Session Session:在计算机中,尤其是在网络应用中,称 ...
- 软件工程日报二——gradle的安装与环境配置
昨天下载了android studio 今天想要进行学习的时候,发现还需要下载gradle 一.进入官网,https://gradle.org/,点击下载 二.进入下载界面 三.选择相应的版本,点击b ...
- docker登录Ubuntu出现error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`的解决方法
命令行登录docker时,在Ubuntu 18.04下可能会出现 error storing credentials - err: exit status 1, out: `Cannot autola ...