簡體   English   中英

如何將json的字符串值轉換成dateTime並進行比較

[英]How to convert a string value of json into dateTime and compare

SELECT JSON_EXTRACT(z2schedule,'$[*].start') 作為 startDate from cpmdev_z2weekly_schedule

運行上面的代碼后,我得到的響應是:- 在此處輸入圖像描述

現在,如果我嘗試使用以下代碼將每個值與時間值進行比較,但它不起作用:-

SELECT JSON_EXTRACT(z2schedule,'$[*].start') as startDate from
cpmdev_z2weekly_schedule where
JSON_EXTRACT(z2schedule,CONVERT('$[*].start'),'TIME')>
'CONVERT('2022-11-02 13:10:00:000', TIME)

我的要求只是將每個值與時間值進行比較,只有在該值大於給定時間時才返回。 例如,在表中,我的數據為:-

[{"start":"09:00:00.000","end":"17:00:00.000"}]
[{"start":"10:00:00.000","end":"17:00:00.000"}]
[{"start":"11:00:00.000","end":"17:00:00.000"}]

現在我想要所有大於 10:00:00 的開始日期在上面的情況下它應該返回:

11:00:00.000

您顯示的 JSON 是一個對象數組。 當您使用$[*].start ,它會返回一個 JSON 數組。 這不是一次。 您可以看到時間值周圍的方括號:

mysql> set @j = '[{"start":"09:00:00.000","end":"17:00:00.000"}]';

mysql> select json_extract(@j, '$[*].start') as times;
+------------------+
| times            |
+------------------+
| ["09:00:00.000"] |
+------------------+

方括號使其作為時間值無效。

mysql> select convert(json_extract(@j, '$[*].start'), time) as times;
+-------+
| times |
+-------+
| NULL  |
+-------+

由於您的 JSON 數組中似乎只有一個 object,因此您可以使用$[0]到 select 數組中的第一個 object。 然后它返回一個字符串值並且可以轉換為時間:

mysql> select convert(json_extract(@j, '$[0].start'), time) as time;
+----------+
| time     |
+----------+
| 09:00:00 |
+----------+

另請注意,在CONVERT() function 中命名的數據類型是關鍵字,而不是帶引號的字符串。 也就是說, 'time'不正確,只需使用time

如果您的 JSON 數組可能有多個 object,並且您需要測試所有這些,那么您應該使用JSON_TABLE() function

順便說一句,如果您將開始和結束時間存儲在正常的行和列中,那么所有這些問題都可以避免。 使用 JSON 會使許多查詢更難開發和優化。 您應該考慮規范化您的數據,而不是使用 JSON。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM