mysql - 日期

日期范围查询

比如:2024-04-05 ~ 2024-04-06

给定这样一个时间范围,我们的查询该怎么写?这道题会影响到我们整体的代码风格

** 情况一**

大部分情况下,客户的实际要求,是查询 5 号加上 6 号的数据;

这时候,你的条件应该是大于 5 号,小于 7 号,可以写成下面这种格式。

select * from demo where gmt_create > DATE('2024-04-05') and gmt_create < DATE_ADD('2024-04-06',INTERVAL 1 DAY);

** 情况二**

也会有小部分人觉得,应该直接使用的条件,大于 5 号,小于 6 号;

实际结果,就是只查询 5 号当天的数据,不包含 6 号的。

当然,这不存在什么问题,区间左闭右开,符合编程人员的思维。只是需要线下沟通,说服客户这么用。

select * from demo where gmt_create > '2024-04-05' and gmt_create < '2024-04-06';

日期比较

-- 日期支持比较运算符(例如:>、<、=)来比较日期的大小。
select * from demo where gmt_create > '2024-04-05';


-- 日期也支持 like 比较。
select * from demo where gmt_create like '2024-04-05%';

日期格式化

-- 字符串转日期
select STR_TO_DATE('2024-01-01 11:11:11', '%Y-%m-%d %H:%s:%s');
-- 日期转字符串
select DATE_FORMAT(NOW(), '%Y-%m-%d %H:%s:%s');

-- 常用的格式化字符:
-- %Y - 四位数的年份
-- %y - 两位数的年份
-- %m - 月份(01-12)
-- %d - 月份中的日(00-31)
-- %H - 小时(00-23)
-- %i - 分钟(00-59)
-- %s - 秒(00-59)

-- 返回当前日期时间,如:2021-03-17 14:46:00
select TIMESTAMP(NOW());
select TIMESTAMP('2021-03-17 14:46:00');

-- 返回当前日期,如:2021-03-17
select TIME(NOW());
select TIME('2021-03-17 14:46:00');

-- 返回当前时间,如:14:46:00
select DATE(NOW());
select DATE('2021-03-17 14:46:00');

当前时间

-- 返回当前日期时间,如:2021-03-17 14:44:06
select now();

-- 返回当前日期,如:2021-03-17
select curdate();

-- 返回当前时间,如:14:46:00
select curtime();

日期加减


-- 日期减一天
SELECT DATE_SUB('2023-03-04', INTERVAL 1 DAY);

-- 日期加一天
SELECT DATE_ADD('2023-03-04', INTERVAL 1 DAY);

-- 两个时间相减,计算日期差
SELECT DATEDIFF('2023-01-02', '2023-01-01') 

extract(expr from date)

返回时间的指定部分的值。

详见:https://www.runoob.com/sql/func-extract.html

-- 年
select extract(year from now());
-- 月
select extract(month from now());
-- 日
select extract(day from now());

posted on 2016-09-26 19:59  疯狂的妞妞  阅读(282)  评论(0编辑  收藏  举报

导航