记一次: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’

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/632183.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

管仲故乡是颍川,何分颍上或颍下

第一仲父管仲,故乡在哪里?依然像许多名人故里一样存在争议,但是这个争议却很不一般,引出了一个大话题。 管子是安徽颍上县人,《史记》记载: “管仲,颍上人也。”颍上县有管鲍祠,是安徽省重点文物…

【小项目】简单实现博客系统(一)(前后端结合)

一、实现逻辑 1)实现博客列表页 让页面从服务器拿到博客数据(数据库) 2)实现博客详情页 点击博客的时候,可以从服务器拿到博客的完整数据 3)实现登录功能(跟之前写的登录页面逻辑一致&…

羊大师解析,春季羊奶助力健康成长

羊大师解析,春季羊奶助力健康成长 随着春天的到来,万物复苏,大自然呈现出一派生机勃勃的景象。在这个充满希望的季节里,我们不仅要关注外界环境的变化,更要关注身体的健康和成长。羊大师发现羊奶作为一种营养丰富的食…

探索未来:苹果如何在 Apple Vision Pro 上进行创新

视觉体验的演进 在当今快节奏的数字化时代,技术创新不断塑造着我们与周围世界互动的方式。在这些进步中,苹果视觉专业技术凭借其创新精神脱颖而出,彻底改变了我们感知和参与视觉内容的方式。 无与伦比的显示技术 苹果视觉专业技术的核心是…

error Component name “Child4“ should always be multi-word

error Component name "Child4" should always be multi-word 这个错误是来自于ESLint的规则,它强制要求组件的名称必须是多单词的。这是因为单单一个单词可能与HTML的内建标签或者其他组件的名称产生冲突,从而导致意外的行为。 解决方法&am…

C#知识|(实例)大乐透双色球随机选号器项目实现(二)

哈喽,你好,我是雷工! 前面记录了UI设计,接下来记录类的设计,及相关代码。 04 类的设计 4.1、创建文件夹 为了使分类更加清晰,添加Models文件夹; 4.2、添加大乐透类 添加SuperLotto.cs类 该类的代码如下: namespace LeiGongNotes {/// <summary>/// 大乐透类…

el-upload 上传多个视频

<el-form-item label="视频" prop="video_url"><el-uploadclass="upload-demo"ref="uploadRef":multiple="true":on-change="handleChange":before-remove="beforeRemove":before-upload=&quo…

Typescript 哲学 - d.ts文件

The .d.ts syntax intentionally looks like ES Modules syntax. ES Modules was ratified by TC39 in 2015 as part of ES2015 (ES6), while it has been available via transpilers for a long time default export (esModuleInterop:true) / export 讲一个 d.ts export 的…

PCB供电夹子DIY

在刷小红书的时候&#xff0c;看到了清华卓晴教授【https://zhuoqing.blog.csdn.net/】DIY的供电夹子&#xff0c;感觉对于自己DIY PCB的时候供电会比较方便&#xff0c;物料也比较简单&#xff0c;打算复刻一下。 使用物料 1、小夹子&#xff0c;文具店都有卖&#xff0c;选…

Android手动下载Gradle的使用方法

导入新项目通常会自动下载gradle版本&#xff0c;这种方式很慢而且经常下载失败&#xff0c;按照提示手动下载的gradle应该放在那里&#xff0c;如何使用&#xff0c;本篇文章为你提供一种亲测有效的方法&#xff1a; 在Android Studio打开Setting搜索Gradle找到Gradle的存放目…

亚马逊测评真人号与自养号:如何选择?区别与作用全面解析

亚马逊卖家都希望能打造出热销产品的产品列表&#xff0c;因为评论对于列表的曝光和流量有着巨大的影响。然而&#xff0c;获取有效的产品评论并不容易&#xff0c;许多卖家为了提高自己产品在同类别中的竞争力&#xff0c;选择进行测评。测评可以快速提高产品的排名、权重和销…

Python自学之路--004:Python使用注意点(原始字符串‘r’\字符转换\‘wb’与‘w区别’\‘\‘与‘\\’区别)

目录 1、原始字符串‘r’ 2、字符转换问题 3、open与write函数’wb’与’w’区分 4、Python里面\与\\的区别 1、原始字符串‘r’ 以前的脚本通过Python2.7写的&#xff0c;通过Python3.12去编译发现不通用了&#xff0c;其实也是从一个初学者的角度去看待这些问题。 其中的\…

ROS2 - 创建项目( Ubuntu 22.04 )

本文简述&#xff1a;在 Ubuntu22.04 系统中使用 VS Code 来搭建一个ROS2开发项目。 ROS2 安装&#xff1a; 可以运行下面的命令&#xff0c;一键安装&#xff1a; wget http://fishros.com/install -O fishros && . fishros 1. 创建工作空间 本文假设配置完成 VS …

探索未来:Google I/O 2024 AI重磅发布一览

亲爱的读者们&#xff0c;大家期待已久的Google I/O开发者大会终于到来了&#xff01;今年的大会尤为特别&#xff0c;Google在发布会上大力强调了人工智能&#xff08;AI&#xff09;的重要性&#xff0c;可以说AI成为了绝对的主角。为了让大家快速了解今年的重点内容&#xf…

短视频创作者的9个免费实用的视频素材网站

在视频剪辑的过程中&#xff0c;找到高质量、无水印且可商用的视频素材是每个创作者的梦想。下面为大家推荐9个无水印素材网站&#xff0c;助你轻松获取所需的视频素材。 1. 蛙学府 - 提供丰富的高清视频素材&#xff0c;涵盖风景、人物、科技等类别。所有素材高清且可商用&…

2025秋招Java还是c++?

一、我的编程经 说说我的编程经历&#xff0c;在C和Java之间我经历了几个阶段&#xff1a; 大学期间&#xff0c;我浅尝辄止地学习了一段时间的Java&#xff0c;但后来放弃了&#xff0c;开始学习C/C。本科毕业后&#xff0c;我选择攻读硕士学位&#xff0c;并一直专注于C的学…

【错题集-编程题】空调遥控(二分 / 滑动窗口)

牛客对应题目链接&#xff1a;空调遥控 (nowcoder.com) 一、分析题目 1、滑动窗口 先排序&#xff0c;然后维护窗口内最大值与最小值的差在 2 * p 之间&#xff08;max - min&#xff09;。 2、二分查找 先排序&#xff0c;然后枚举所有的温度&#xff0c;⼆分出符合要求的…

C语言详解:数组指针

数组指针是指针 int* p[10] 这是指针数组的写法 &#xff0c;因为【】的优先级比*高&#xff0c; 所以为了解决优先级问题&#xff0c;加&#xff08;&#xff09; int(* p)[10]&arr;//数组的地址要存起来 说明p是指针&#xff08;首先与*结合&#xff09;&#xff0c…

python开发的学习路线

I. 基础知识学习 A. Python基础语法 变量和数据类型 学习如何定义变量&#xff0c;理解并使用不同的数据类型&#xff08;整数、浮点数、字符串、布尔值等&#xff09;。 掌握数字类型的转换和操作。 熟悉字符串的基本操作&#xff0c;如拼接、切片、替换和查找。 …

JVM内存模型最新面试题(持续更新)

问题&#xff1a;java中创建的对象一般放在哪里&#xff1f;(全流程包含从创建到回收) 回答 大部分对象在堆中&#xff0c;这个基本都知道&#xff1b; 少部分对象是会在栈中的&#xff0c;比如作用域不局限于方法内的方法内部变量&#xff0c;这类对象的特征一般就是生命周期…