Как создать виртуальный столбец типа timestamp в mysql из извлеченной даты json? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть поле LOREM типа json в моей таблице mysql БД BLAH.

У LOREM есть свойство createOn, которое представляет собой дату, отформатированную так: 2020-03-05T04:30:00.000+0000 (Это полученное значение запустив команду:

SELECT LOREM ->>'$.createdOn' FROM BLAH;)

Я пытаюсь создать виртуальный сгенерированный столбец для созданного на нем, чтобы запросы стали немного проще. Я пытался поместить это в ddl при создании таблицы:

CREATED_ON timestamp(3) GENERATED ALWAYS AS (CAST(LOREM ->> '$.createdOn' AS DATETIME)) VIRTUAL,, но при вставке записи я получаю сообщение об ошибке:

1292 Сокращенное неверное значение datetime: '2020 -03-05T04: 30: 00.000 + 0000 '

Я пытался изменить точность отметки времени столбца с 3 до 6, но это не сработало. Я также пытался

CREATED_ON timestamp(3) GENERATED ALWAYS AS (TIMESTAMP(CAST(LOREM ->> '$.createdOn' AS DATETIME))) VIRTUAL,, но получил ту же ошибку.

Есть идеи, почему это может происходить и как мне это решить?

1 Ответ

0 голосов
/ 05 марта 2020

11.2.2 Типы DATE, DATETIME и TIMESTAMP

...

Начиная с MySQL 8.0.19, вы можете указать смещение часового пояса при вставке значений TIMESTAMP и DATETIME в таблицу. Смещение добавляется к части даты литерала datetime без пробелов внутри и использует тот же формат, что и для установки системной переменной time_zone, со следующими исключениями:

  • Для значений часов меньше чем 10, требуется начальный ноль.
  • Значение '-00: 00' отклонено.
  • Названия часовых поясов, такие как EET и Asia / Shanghai, использовать нельзя; 'SYSTEM' также не может использоваться в этом контексте.

...

2020-03-05T04:30:00.000+0000 != 2020-03-05T04:30:00.000+00:00

См. dbfiddle .

...