记一次:mysql统计的CAST函数与json字段中的某个字段

前言:因为需求的问题,会遇到将某个json存入到一个字段中,但在统计的时候,又需要将这个json中的某个字段作为条件来统计,所以整理了一下cast函数和json中某个字段的条件判断

一、浅谈mysql的json

 1.1 上例子

SELECT
		lide.id,
		lide.event_values -> '$.MeasureValue' AS MeasureValue,
		lide.event_values -> '$.MeasureIndex_Name' AS MeasureIndex_Name,
		lide.event_values -> '$.deviceName' AS deviceName,
		lide.create_time 
	FROM
		lhkj_iot_driver_event lide

注意:上面的 -> 可以用JSON_EXTRACT(lide.event_values, '$.MeasureValue') 代替,如下

SELECT
		lide.id,
		JSON_EXTRACT(lide.event_values, '$.MeasureValue')  AS MeasureValue,
		JSON_EXTRACT(lide.event_values, '$.MeasureIndex_Name') AS MeasureIndex_Name,
		JSON_EXTRACT(lide.event_values, '$.deviceName') AS deviceName,
		lide.create_time 
	FROM
		lhkj_iot_driver_event lide

1.2 解析

mysq json 主要有JSON 对象(json object )和JSON 数组(json array )两种类型

$表示整个json对象,在索引数据时用下标(对于json array,从0开始)或键值(对于json object,含有特殊字符的key要用"括起来,比如$.“my name”)

根据1.1的筛选后面的json条件参数就可以筛选了

1.3 扩展--mysql相关的json函数

二、浅谈CAST函数

2.1 上例子

SELECT
	CAST( create_time AS date ) AS compareDate,
	ROUND( AVG( MeasureValue ), 3 ) AS averageValue 
FROM
	(
	SELECT
		lide.id,
		JSON_EXTRACT(lide.event_values, '$.MeasureValue')  AS MeasureValue,
		JSON_EXTRACT(lide.event_values, '$.MeasureIndex_Name') AS MeasureIndex_Name,
		JSON_EXTRACT(lide.event_values, '$.deviceName') AS deviceName,
		lide.create_time 
	FROM
		lhkj_iot_driver_event lide
	WHERE
		lide.create_time BETWEEN '2022-04-01' AND '2024-05-01'
	AND lide.identifier = 'Rept_MeasureData'
	) t
        group by compareDate;

个人理解:一般CAST要和分组group by组合使用,不仅仅是cast函数,一般的函数都要分组使用不然的话统计出来的只有一条数据往往不是我们想要的结果

2.2 解析

CAST( create_time AS date )是按日期进行转换的,那么也可以按年,按月等如下

SELECT 
  CAST(create_time  AS CHAR(7)) AS month_as_date,
	YEAR(CAST(create_time AS DATE)) AS year_number,
  MONTH(CAST(create_time AS DATE)) AS month_number,
	ROUND( AVG( MeasureValue ), 3 ) AS averageValue 

但这也不是我想要的结果,如果按年-月统计的话我又该如何应对?所以可以用大招, CHAR(数值)

在MySQL中,CAST函数可以用来转换或者格式化时间数据类型。我们想要将这个时间格式化为'YYYY-MM-DD HH:MM:SS'格式。

SELECT CAST(event_datetime AS CHAR(19)) AS formatted_datetime
FROM events;
如果你想要将时间转换为其他格式,你可以更改CHAR(19)为其他的字符长度,并相应地调整格式字符串。例如,如果你想要转换为'YYYY-MM-DD'格式,你可以这样做:

SELECT CAST(event_datetime AS CHAR(10)) AS formatted_date
FROM events;
请注意,CAST函数的具体实现可能会依赖于MySQL的版本,上述代码在MySQL 5.x和更高版本中通常有效。

2.3 扩展--cast规则

CAST函数语法规则:Cast(字段名 as 转换的类型 )

其中类型可以为:

CHAR[(N)] 字符型
DATE 日期,格式为 ‘YYYY-MM-DD’
DATETIME 日期加具体的时间,格式为 ‘YYYY-MM-DD HH:MM:SS’
DECIMAL float型
SIGNED int 型
TIME 时间,格式为 ‘HH:MM:SS’

--------------------------------------- 上述暂时到这,后续在扩展 ------------------------------------

相关推荐

  1. mybatis查询修改mysqljson字段

    2024-05-16 11:42:11       30 阅读
  2. 前端Vue根据List某个字段排序

    2024-05-16 11:42:11       13 阅读
  3. 接口请求对象转json字段大小写处理

    2024-05-16 11:42:11       13 阅读
  4. mysql某个字段截取某部分

    2024-05-16 11:42:11       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 11:42:11       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 11:42:11       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 11:42:11       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 11:42:11       18 阅读

热门阅读

  1. bert 的MLM框架任务-梯度累积

    2024-05-16 11:42:11       12 阅读
  2. Ubuntu安装ZLMediaKit

    2024-05-16 11:42:11       14 阅读
  3. C++之lambda【匿名函数】

    2024-05-16 11:42:11       11 阅读
  4. MHA 高可用部署

    2024-05-16 11:42:11       10 阅读
  5. react + antd:新建项目问题汇总

    2024-05-16 11:42:11       10 阅读
  6. 引导前端学习

    2024-05-16 11:42:11       11 阅读
  7. C++并发:构建线程安全的队列

    2024-05-16 11:42:11       10 阅读