Как преобразовать строковое значение json в dateTime и сравнить

ВЫБЕРИТЕ JSON_EXTRACT(z2schedule,'$[*].start') как startDate из 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

Отображение некоторых образцов данных таблицы и образца желаемого набора результатов поможет вам получить ответы. Пожалуйста отредактируйте свой вопрос.

O. Jones 03.10.2022 14:26
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Показанный вами 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, похоже, есть только один объект, вы можете использовать $[0], чтобы выбрать первый объект в массиве. Затем он возвращает одно строковое значение, которое можно преобразовать во время:

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

Также обратите внимание, что тип данных, указанный в функции CONVERT(), является ключевым словом, а не строкой в ​​кавычках. То есть 'time' неверно, просто используйте time.

Если в вашем массиве JSON может быть более одного объекта, и вам нужно протестировать их все, вам следует использовать функцию JSON_TABLE().

Кстати, всех этих проблем можно было бы избежать, если бы вы сохраняли время начала и окончания в обычных строках и столбцах. Использование JSON усложняет разработку и оптимизацию многих запросов. Вам следует подумать о нормализации ваших данных, а не об использовании JSON.

Другие вопросы по теме