mysql 获取当天零点和当天最后时间

要进行数据统计,统计前一天的数据量

时间处理:

当天零点

sql 复制代码
 SELECT DATE(NOW()) AS today_zero_time;

当天最后时间:

sql 复制代码
 SELECT DATE_ADD(ADDDATE(DATE(NOW()), 1), INTERVAL -1 SECOND) AS today_last_time;

昨天零点

sql 复制代码
SELECT  ADDDATE(DATE(NOW()), -1) AS yesterday_last_time;

昨天最后时间:

sql 复制代码
SELECT  DATE_ADD(DATE(NOW()), INTERVAL -1 SECOND) AS yesterday_last_time;

指定日期零点

sql 复制代码
SELECT DATE(STR_TO_DATE("2024-08-08 12:13:14", '%Y-%m-%d %H:%i:%s')) AS appoint_zero_time;

指定日期最后时间:

sql 复制代码
SELECT DATE_ADD(ADDDATE(DATE(STR_TO_DATE("2024-08-08 12:13:14", '%Y-%m-%d %H:%i:%s')), 1), INTERVAL -1 SECOND) AS appoint_last_time;

数据准备:

表格:

sql 复制代码
CREATE TABLE `cust_test_letter` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '标识',  
  `letter_info` VARCHAR(1000) DEFAULT NULL COMMENT '来信内容',
  `letter_date` DATE  DEFAULT NULL COMMENT '来信日期', 
  `letter_time` DATETIME DEFAULT NOW() COMMENT '来信日期时间',
  PRIMARY KEY (`id`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='测试来信';

数据:

sql 复制代码
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('1','需要整改','2024-07-31','2024-07-31 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('2','需要整改','2024-08-05','2024-08-05 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('3','需要整改','2024-08-06','2024-08-06 10:08:44');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('4','需要整改','2024-08-01','2024-08-01 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('5','需要整改','2024-08-09','2024-08-09 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('6','需要整改','2024-08-12','2024-08-12 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('7','需要整改','2024-08-09','2024-08-07 08:57:33');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('8','需要整改','2024-08-10','2024-08-07 08:59:36');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('9','需要整改','2024-08-07','2024-08-07 08:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('10','需要整改','2024-08-06','2024-08-06 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('11','需要整改','2024-08-07','2024-08-07 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('12','需要整改','2024-08-01','2024-08-01 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('13','需要整改','2024-08-07','2024-08-07 13:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('14','需要整改','2024-08-07','2024-08-07 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('15','需要整改','2024-08-08','2024-08-08 00:00:00');
insert into cust_test_letter (id, letter_info, letter_date, letter_time) values('16','需要整改','2024-08-08','2024-08-08 09:09:37');

查询处理:

查询昨天的数据:

大于等于小于
sql 复制代码
 SELECT * FROM cust_test_letter  ctl  
 WHERE ctl.letter_date >=  ADDDATE(DATE(NOW()), -1) 
AND  ctl.letter_date < DATE(NOW()) ;
between
sql 复制代码
 SELECT * FROM cust_test_letter  ctl  
 WHERE ctl.letter_date BETWEEN  ADDDATE(DATE(NOW()), -1) 
AND DATE_ADD(DATE(NOW()), INTERVAL -1 SECOND);

感觉用大于等于和小于的方式更为直观

总结:

mysql 查询数据的时候,要注意时间的临界点,避免数量对应不上。

相关推荐
言德斐12 分钟前
SQL性能优化的思路及策略
数据库·sql·性能优化
码界奇点22 分钟前
Django视图从基础到高级的全面解析
数据库·django·sqlite·web·python3.11
Allan_202530 分钟前
数据库学习
数据库·学习
fen_fen36 分钟前
人大金仓数据库kingbase8创建表示例
数据库·oracle
一勺菠萝丶41 分钟前
「您的连接不是私密连接」详解:为什么 HTTPS 证书会报错,以及如何正确配置子域名证书
数据库·网络协议·https
²º²²এ松1 小时前
蓝牙低功耗(BLE)通信的中心设备/外围设备(连接角色)、主机/从机(时序角色)、客户端/服务器(数据交互角色)的理解
运维·服务器·数据库
百锦再1 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
数据库知识分享者小北2 小时前
云栖重磅|瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
数据库·人工智能·云原生
_Johnny_2 小时前
Redis 升级操作指南:单机与主从模式
数据库·redis·缓存
源力祁老师2 小时前
ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
xml·数据库·sql