前言
本篇是讲时间查询的各种函数
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')
– 日期字符串转时间戳,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