2017-02-17 8 views
0

Я использую тип данных MySQL json для хранения строки JSON. В строке JSON находятся два поля: entry_time и entry_date. Значения этих полей сохраняются в формате ISO 8609 следующим образом: entry_date: 2017-02-15T00: 00: 00.00Z entry_time: 0000-00-00T04: 35: 51.29ZСоздание виртуальных столбцов даты и времени из SO 8609 Значения JSON в MySQL 5.7

Я пытаюсь создать виртуальный столбец из этих двух атрибутов. Поскольку MySQL 5.7 имеет NO_ZERO_DATE, я не вижу способа извлечь эти значения в качестве столбцов даты и времени. Вот что я пробовал:

alter table odh 
add entry_time time GENERATED ALWAYS AS (REPLACE,(json_extract(jdoc,'$.entry_time')),'0000-00-00T','') 

Но я не могу получить работу сота.

ответ

2

см настройки sql_mode

mysql> SELECT STR_TO_DATE('0000-00-00T04:35:51.29Z', '%Y-%m-%dT%H:%i:%s.%fZ'); 
+-----------------------------------------------------------------+ 
| STR_TO_DATE('0000-00-00T04:35:51.29Z', '%Y-%m-%dT%H:%i:%s.%fZ') | 
+-----------------------------------------------------------------+ 
| NULL               | 
+-----------------------------------------------------------------+ 
1 row in set, 1 warning (0,00 sec) 

mysql> set sql_mode=''; 
Query OK, 0 rows affected, 1 warning (0,00 sec) 

mysql> SELECT STR_TO_DATE('0000-00-00T04:35:51.29Z', '%Y-%m-%dT%H:%i:%s.%fZ'); 
+-----------------------------------------------------------------+ 
| STR_TO_DATE('0000-00-00T04:35:51.29Z', '%Y-%m-%dT%H:%i:%s.%fZ') | 
+-----------------------------------------------------------------+ 
| 0000-00-00 04:35:51.290000          | 
+-----------------------------------------------------------------+ 
1 row in set (0,00 sec) 

mysql>