[MySQL]日历聚合函数是否具有确定性

时间:2019-01-09 11:34:26

标签: mysql calculated-columns

在MySQL表中,我有一个字段TransMonth,请注意,这是一个实际日期,其名称反映了由于其导入方式,它存储为完整的日期(每月1号)。

我想使用“生成的列”添加TransMonth_YRTransMonth_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上使用过计算列吗?

0 个答案:

没有答案