在 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 生成的 SMALLINT 始终为 (YEAR(TransMonth)) 存储
...但这会检查您的语法错误。有没有人计算过在 MySQL 上工作的列?