0

在 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 生成的 SMALLINT 始终为 (YEAR(TransMonth)) 存储

...但这会检查您的语法错误。有没有人计算过在 MySQL 上工作的列?

4

0 回答 0