sql日期函数统计日月年订单数

场景:汇集日月年的订单数,分别在mysql和oracle数据库实现相同的效果

示例1:

sql 复制代码
--创建mysql测试表 
drop table test.test;
create table test.test
(
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(50) DEFAULT NULL COMMENT '名称',
c_date date ,
PRIMARY KEY (`id`)
) CHARSET = utf8mb4 COMMENT = '测试表';

insert into test.test(name,c_date) values ('one',date_add(now(), interval -1 day));
insert into test.test(name,c_date) values ('two',date_add(now(), interval -2 day));
insert into test.test(name,c_date) values ('three',date_add(now(), interval -3 day));
insert into test.test(name,c_date) values ('four',date_add(now(), interval -3 day));

select * from test.test;
id	name	c_date
1	one	2024-05-19
2	two	2024-05-18
3	three	2024-05-17
4	four	2024-05-17

--昨日
select date_format(date_add(current_timestamp(), interval -1 day),'%Y%m%d') ;
20240520
--当日
select date_format(current_timestamp(),'%Y%m%d') ;
20240521
--本周
select week(current_timestamp()) from dual;
20
--本月
select date_format(current_timestamp(),'%Y%m') ;
202405
--本年
select date_format(current_timestamp(),'%Y') ;
2024

--使用sql实现统计昨日当日当周当月当年的数据量
select 
'昨日' as  c_type
,count(1) as cnt  
from  test.test
where date_format(c_date,'%Y%m%d') = date_format(date_add(current_timestamp(), interval -1 day),'%Y%m%d')

union all
select 
'当日' as  c_type
,count(1) as cnt  
from  test.test
where date_format(c_date,'%Y%m%d') = date_format(current_timestamp(),'%Y%m%d')

union all
select 
'本周' as  c_type
,count(1) as cnt  
from  test.test
where c_date between concat(date_format( date_sub(current_timestamp(),interval weekday(current_timestamp()) day),'%Y-%m-%d'),' 00:00:00') 
	and concat(date_format( date_sub(current_timestamp(),interval weekday(current_timestamp())- 6 day),'%Y-%m-%d'),' 23:59:59') 

union all
select 
'本月' as  c_type
,count(1) as cnt  
from  test.test
where date_format(c_date,'%Y%m') = date_format(current_timestamp(),'%Y%m')

union all
select 
'本年' as  c_type
,count(1) as cnt  
from  test.test
where date_format(c_date,'%Y') = date_format(current_timestamp(),'%Y')

c_type	cnt
昨日	0
当日	0
本周	0
本月	4
本年	4

示例2:

sql 复制代码
--创建oracle测试表 
drop table test.test;
create table test.test
(
id int NOT NULL,
name varchar2(50) DEFAULT NULL ,
c_date date ,
CONSTRAINT "pk_id" PRIMARY KEY (id)
) ;

insert into test.test
select '1','one', sysdate - 1  FROM dual
 union all
select '2','two', sysdate - 2 FROM dual
 union all
select '3','three', sysdate - 3 FROM dual
 union all
select '4','four', sysdate - 3 FROM dual

SELECT * FROM  test.test
ID	NAME	C_DATE
1	one	2024-05-19 18:02:03.000
2	two	2024-05-18 18:02:03.000
3	three	2024-05-17 18:02:03.000
4	four	2024-05-17 18:02:03.000

--昨日
select TO_CHAR(TRUNC(sysdate-1), 'yyyymmdd') from dual;
20240520
--当日
select TO_CHAR(TRUNC(sysdate), 'yyyymmdd') from dual;
20240521
--本周
select TO_CHAR(SYSDATE,'IW')  from dual;
21
--本月
select TO_CHAR(TRUNC(sysdate), 'yyyymm') from dual;
202405
--本年
select TO_CHAR(TRUNC(sysdate), 'yyyy') from dual;
2024

--使用sql实现统计昨日当日当周当月当年的数据量
select 
'昨日' as  c_type
,count(1) as cnt  
from  test.test
where c_date between TRUNC(sysdate - 1) and TRUNC(sysdate - 1) + 0.99999

union all
select 
'当日' as  c_type
,count(1) as cnt  
from  test.test
where c_date between TRUNC(sysdate) and TRUNC(sysdate) + 0.99999

union all
select 
'本周' as  c_type
,count(1) as cnt  
from  test.test
where c_date between TRUNC(SYSDATE ,'iw') and TRUNC(SYSDATE ,'iw') + 6 + 0.99999

union all
select 
'本月' as  c_type
,count(1) as cnt  
from  test.test
where TO_CHAR(c_date,'YYYY-MM') = TO_CHAR(SYSDATE, 'YYYY-MM')

union all
select 
'本年' as  c_type
,count(1) as cnt  
from  test.test
where TO_CHAR(c_date,'YYYY') = TO_CHAR(SYSDATE, 'YYYY')

C_TYPE	CNT
昨日	0
当日	0
本周	0
本月	4
本年	4
相关推荐
是发财不是旺财3 分钟前
Hermes 网关四层权限控制方案:让 AI Agent 安全地查数据库
数据库·安全·agent·openclaw·hermes
阿正的梦工坊19 分钟前
【Rust】04-借用、引用与切片
java·数据库·rust
AOwhisky23 分钟前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
持敬chijing30 分钟前
Web渗透之SQL注入总结
sql·安全·web安全·网络安全·网络攻击模型·web
阿标在干嘛34 分钟前
政策平台的推送系统:消息队列、定时任务、AB测试的工程实践
服务器·数据库·ab测试
Upsy-Daisy44 分钟前
Hermes Agent 学习笔记 02:安装、配置与第一次运行
java·前端·数据库
davawang1 小时前
基于SQL实现分组的文字排序聚合
sql·分析函数·数据平台
Tongpao_SSDHDD1 小时前
希捷酷鹰ST6000VX008实测解析:中小安防监控高性价比存储方案
大数据·数据库·人工智能
蓝鸟19742 小时前
Oracle超大DMP备份文件瘦身、日志精简、磁盘空间优化实战方案日志
数据库·oracle·数据库运维·生产运维实战·oracle避坑·磁盘空间优化·oracle日志清理
金融支付架构实战指南2 小时前
CQRS + 命令模式 + 事件驱动 + 数据库持久化
数据库·ddd·命令模式·领域驱动模型