前言:因為需求的問題,會遇到將某個json存入到一個字段中,但在統計的時候,又需要將這個json中的某個字段作為條件來統計,所以整理了一下cast函數和json中某個字段的條件判斷
一、淺談mysql的json
?1.1 上例子
SELECTlide.id,lide.event_values -> '$.MeasureValue' AS MeasureValue,lide.event_values -> '$.MeasureIndex_Name' AS MeasureIndex_Name,lide.event_values -> '$.deviceName' AS deviceName,lide.create_time FROMlhkj_iot_driver_event lide
注意:上面的 -> 可以用JSON_EXTRACT(lide.event_values, '$.MeasureValue') 代替,如下
SELECTlide.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 FROMlhkj_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 上例子
SELECTCAST( create_time AS date ) AS compareDate,ROUND( AVG( MeasureValue ), 3 ) AS averageValue
FROM(SELECTlide.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 FROMlhkj_iot_driver_event lideWHERElide.create_time BETWEEN '2022-04-01' AND '2024-05-01'AND lide.identifier = 'Rept_MeasureData') tgroup 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’
--------------------------------------- 上述暫時到這,后續在擴展 ------------------------------------