MySQL生成列的日期类型

5

我使用的是MySQL 5.7版本。

我有一个名为devicetime的字段,它是一个datetime字段。

由于某种原因,我想添加一个生成的列,仅存储devicetime字段的date部分。

我尝试了以下语句:

alter table mytable
add COLUMN recorddate date generated always as date(devicetime) stored;

我出现了一个错误。

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near  'date(devicetime) stored' at line 2

我从MySQL文档这个链接中获取了输入。

我的当前表结构如下:

enter image description here


不感兴趣触发器。 - Lakshman Pilaka
你当前的表结构是什么? - Madhur Bhaiya
在计算列中,您只能使用线性和确定性函数。我认为“日期”(以及可能是其他日期/时间函数)的问题在于,由于时区问题,两个独立的用户可能无法始终获得相同的结果。 - Tim Biegeleisen
一个解决方法可能是将日期时间存储为普通字符串,然后创建一个计算列,该列是该字符串的日期子字符串。 - Tim Biegeleisen
@TimBiegeleisen 这很有道理,但是 "deviceTime" 是一个 DATETIME 字段(不是 TIMESTAMP),无法转换为会话时区(它存储的是你给它的文字)。 - Vatev
@Vatev 是的...我的评论没有完全意义,但我敢打赌原因是类似这样的东西。 - Tim Biegeleisen
2个回答

6
无论什么原因,MySQL需要在表达式周围加上一些()
ALTER TABLE `mytable ` 
ADD COLUMN  `recorddate` DATE GENERATED ALWAYS AS (date(devicetime)) STORED;

结果证明问题只是一个语法问题...添加括号解决了我的问题... - Lakshman Pilaka

0
一个解决方案浮现在我的脑海中,你可以将TIMESTAMP存储到表中。当你尝试在系统的任何地方获取时,你可以使用DATE_FORMAT()STR_TO_DATE()函数从实际数据中获取所需的任何部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接