前言

本篇是讲时间查询的各种函数

Mysql获取昨日、今日时间以及时间戳

1、2020-04-14 00:00:00

-- 时间格式
SELECT DATE_FORMAT(CAST(SYSDATE()AS DATE),'%Y-%m-%d %H:%i:%s');

-- 时间戳
SELECT UNIX_TIMESTAMP(DATE_FORMAT(CAST(SYSDATE()AS DATE),'%Y-%m-%d %H:%i:%s'));

2、2020-04-14 23:59:59

-- 时间格式
SELECT DATE_SUB( DATE_ADD(CAST(SYSDATE()AS DATE), INTERVAL 1 DAY),INTERVAL 1 SECOND);

-- 时间戳
SELECT UNIX_TIMESTAMP(DATE_SUB(DATE_ADD(CAST(SYSDATE()AS DATE), INTERVAL 1 DAY),INTERVAL 1 SECOND));

3、今天日期:2020-04-14

SELECT CAST(SYSDATE()AS DATE)

4、当前时间:2020-04-14 18:43:25

SELECT SYSDATE(),now()

5、获取昨日0点时间和12::59:59秒时间和时间戳

SELECT 
CONCAT(DATE_FORMAT(CAST(SYSDATE()AS DATE) - INTERVAL 1 DAY,'%Y-%m-%d'),' 00:00:00'),
CONCAT(DATE_FORMAT(CAST(SYSDATE()AS DATE) - INTERVAL 1 DAY,'%Y-%m-%d'),' 23:59:59')

image.png

– 日期字符串转时间戳,10位,数据库存储的是13位
select UNIX_TIMESTAMP(‘2019-09-01 00:00:00’);

– 时间戳转日期
select FROM_UNIXTIME(1567267200,‘%Y-%m-%d %H:%i:%s’)

6、查询最近一天的时间

SELECT DATE_ADD('1589201281', INTERVAL -1 DAY)

7、当日/昨天/前三天

SELECT CAST(SYSDATE()AS DATE);	-- 2020-06-05
SELECT DATE_SUB(DATE_ADD(CAST(SYSDATE()AS DATE), INTERVAL 1 DAY),INTERVAL 1 SECOND);	-- 2020-06-05 23:59:59
SELECT UNIX_TIMESTAMP('2020-06-05')+86400-1;	-- 参数当天结束时间戳

SELECT DATE_SUB(CAST(SYSDATE()AS DATE), INTERVAL 1 DAY);	-- 2020-06-04
SELECT DATE_SUB(DATE_SUB(CAST(SYSDATE()AS DATE), INTERVAL 0 DAY),INTERVAL 1 SECOND);	-- 2020-06-04 23:59:59
SELECT UNIX_TIMESTAMP('2020-06-05')-1;	-- 2020-06-04 23:59:59

SELECT DATE_SUB(CAST(SYSDATE()AS DATE), INTERVAL 2 DAY);	-- 2020-06-03
SELECT DATE_SUB(DATE_SUB(CAST(SYSDATE()AS DATE), INTERVAL 1 DAY),INTERVAL 1 SECOND);	-- 2020-06-04 23:59:59
SELECT UNIX_TIMESTAMP('2020-06-05')-86400-1;	-- 2020-06-04 23:59:59

二、时间使用规范

最近开发公司项目时候,发现年月日、年月、年、时间这么多字段,平时我们只知道date和datetime,那么经过这次开发,我明白了如何使用才正确

种类 mysql类型 java类型
年月日 date Date
年月 date Date
date或int Date
时间 datetime Date

element前端控件不管是年月日、日期、年月、年一般都需要用date是最好的,不然无法回显
year使用year类型时候范围只能在1971-2039范围内,并且返回前端不太好显示,所以有坑,尽量不要用,应尽量使用int或者date

三、MySQL日期 转换函数

  • date_format(date, ‘%Y-%m-%d’) 函数
  • 用法

时间转字符串

select date_format(now(),'%Y-%m-%d');  

 #结果:2016-01-05 

时间转时间戳

select unix_timestamp(now());  

#结果:1452001082   

字符串转时间

select str_to_date('2016-01-02','%Y-%m-%d %H'); 

      #结果:2016-01-02 00:00:00 

字符串转时间戳

select unix_timestamp('2016-01-02'); 

#结果:1451664000  

时间戳转时间

select from_unixtime(1451997924); 

#结果:2016-01-05 20:45:24

时间戳转字符串

 select from_unixtime(1451997924,'%Y-%d');

 #结果:2016-01-05 20:45:24