mysql - 如何从 json 提取日期在 mysql 中生成时间戳类型的虚拟列?
问题描述
我的 mysql DB 表 BLAH 中有一个 json 类型的字段 LOREM。
LOREM 有一个 createdOn 属性,它是一个格式如下的日期:(2020-03-05T04:30:00.000+0000
这是通过运行命令检索到的值:
SELECT LOREM ->>'$.createdOn' FROM BLAH;
)
我正在尝试为 created on 创建一个虚拟生成的列,以便查询变得更容易一些。创建表时,我尝试将其放入 ddl 中:
CREATED_ON timestamp(3) GENERATED ALWAYS AS (CAST(LOREM ->> '$.createdOn' AS DATETIME)) VIRTUAL,
但是在插入条目时出现错误:
1292 截断不正确的日期时间值:'2020-03-05T04:30:00.000+0000'
我尝试将列时间戳精度从 3 更改为 6,但这没有用。我也试过
CREATED_ON timestamp(3) GENERATED ALWAYS AS (TIMESTAMP(CAST(LOREM ->> '$.createdOn' AS DATETIME))) VIRTUAL,
,但得到了同样的错误。
知道为什么会发生这种情况以及我应该如何解决它?
解决方案
11.2.2 DATE、DATETIME 和 TIMESTAMP 类型
...
从 MySQL 8.0.19 开始,您可以在将 TIMESTAMP 和 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。
推荐阅读
- ethereum - 最近签的Clique POA 一定要等别人
- html - 如何在纯 html 中禁用 ctrl+u amd F12
- r - 在运行 if else 循环时管理数据帧中的 NA 值
- javascript - CoffeeScript 错误与实际代码不同
- json - 如何在折线传单周围添加多边形
- html - 为什么可以在snippets.json中自定义css缩写而不是html:5?
- asp.net-mvc - AngularJS 5 在项目中的使用
- arrays - 在数组中查找重复连续值的最短方法
- java - Spring Boot Devtools如何在独立模块中重新加载Maven多个依赖模块?
- r - 提取 R 中 DT 每一行的第 n 列,其中 n 是 DT 中行数的向量