MySQL 按日期 group by 实现

背景:

最近在统计数据,今天有个要求是要统计每天的订单数量。表中 created_date (创建日期)字段是 datetime 类型。

 

心路历程:

1. group by 字符串

把 created_date 变成 字符串,然后截取前十位, 使用 group by, 统计 count(0)

尝试了以下 sql 之后,没有成功。

SELECT
	substring(created_date, 0, 10),
	COUNT(0)
FROM
	`order`
GROUP BY
	substring(created_date, 0, 10);

问题在于: substring 中的 index 参数为 0 返回 空。

由于个人的思维定式,导致在错误的道路上渐行渐远。还好找到了回来的路。

正确的写法如下,实现了功能:

SELECT
	substring(created_date, 1, 10),
	COUNT(0)
FROM
	`order`
GROUP BY
	substring(created_date, 1, 10);

 

2. cast(created_date as date)

是不是有其他人也这方面的需求,查一查,查到了函数 

cast(created_date as date)

SELECT
	cast(created_date AS date) AS '日期',
	COUNT(0) AS '下单数量'
FROM
	`order`
GROUP BY
	cast(created_date AS date)

 

字符串的截取

1、left(字段名,index) 从左边开始第index开始截取

2、right(字段名,index)从右边开始第index开始截取

3、substr\substring(字段名,index)当index>0从左边开始截取直到结束  当index<0从右边开始截取直到结束  当index=0返回空

4、substr\substring(字段名,index,len)从index开始,截取len长度

5、substring_index(字段名,str,count),str是截取的字段 count是从哪里开始截取(为0则是左边第0个开始,1位左边开始第一个选取左边的,-1从右边第一个开始选取右边的

 

字段类型转换 cast

CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。

如: 

SELECT CAST('12.5' AS decimal(9,2))


 

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值