背景:
最近在统计数据,今天有个要求是要统计每天的订单数量。表中 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))