在MySQL表中,我有一个字段TransMonth
,请注意,这是一个实际日期,其名称反映了由于其导入方式,它存储为完整的日期(每月1号)。
我想使用“生成的列”添加TransMonth_YR
,TransMonth_MNTH
等。但是我收到一个一般性的“检查您的SQL”错误。
...right syntax to use near 'PERSISTENT AFTER `DateUpdated`,
CHANGE COLUMN `TransMonth_QTR` `TransMonth_QTR'
更新代码:
ALTER TABLE `tbl_transactions`
CHANGE COLUMN `TransMonth_YR` `TransMonth_YR` SMALLINT(6) AS (YEAR(TransMonth)) PERSISTENT AFTER `DateUpdated`,
CHANGE COLUMN `TransMonth_QTR` `TransMonth_QTR` TINYINT(4) AS (QUARTER(TransMonth)) PERSISTENT AFTER `TransMonth_YR`,
CHANGE COLUMN `TransMonth_MNTH` `TransMonth_MNTH` TINYINT(4) AS (MONTH(TransMonth)) PERSISTENT AFTER `TransMonth_QTR`;
我进行了搜索,但是找不到特定于YEAR(),MONTH()等的示例,仅引用内置函数DETERMINISTIC即可。
我的逻辑是,如果您执行YEAR(2018-01-01),它将始终返回2018,因此应该是确定的。
我的逻辑声音是否正确,是否还缺少其他失败的东西?
编辑:我在MySQL
找到了此代码ALTER tbl_transactions_to_2018_11 添加列TransMonth_YR_B SMARTINT总是存储(按年(跨月)存储)
...但是得到相同的检查语法错误。有人在MySQL上使用过计算列吗?