MySQL自动计算年龄的计算列SQL语句报错求助
问题解决思路
核心语法错误修正:
- 函数调用必须加括号:
NOW要改成NOW(),你写错的currendate正确拼写是CURDATE(),同样需要加括号 - CASE语句的ELSE分支不能留空,必须返回明确数值,这里应写
ELSE 0 - 列名引用错误:
@client_date_naissance多了@符号,直接用列名client_date_naissance即可 - 计算列末尾的分号要删除,否则会提前截断表定义语句
- 函数调用必须加括号:
更简洁的年龄计算方案:
用TIMESTAMPDIFF(YEAR, client_date_naissance, CURDATE())直接计算年龄,无需手动判断月份和日期,语法更简洁且不易出错。正确建表示例
CREATE TABLE client( id_client INT AUTO_INCREMENT NOT NULL, client_date_naissance DATE NOT NULL, age INT AS (TIMESTAMPDIFF(YEAR, client_date_naissance, CURDATE())) VIRTUAL, CONSTRAINT client_PK PRIMARY KEY (id_client) )ENGINE=InnoDB;
或者修正你原逻辑的版本:
CREATE TABLE client( id_client INT AUTO_INCREMENT NOT NULL, client_date_naissance DATE NOT NULL, age INT AS (YEAR(NOW()) - YEAR(client_date_naissance) - (CASE WHEN MONTH(client_date_naissance) > MONTH(NOW()) OR (MONTH(client_date_naissance) = MONTH(NOW()) AND DAY(client_date_naissance) > DAY(NOW())) THEN 1 ELSE 0 END)) VIRTUAL, CONSTRAINT client_PK PRIMARY KEY (id_client) )ENGINE=InnoDB;
内容的提问来源于stack exchange,提问作者jeremy
相关产品推荐
相关产品推荐

