我需要计算年龄。现在我想将年龄字段设置为一个虚拟列,并根据生日自动生成它。虚拟列的表达式应该如何编写now()curate()函数不能用于虚拟列
tyu7yeag1#
可以使用以下表达式:
SELECT TIMESTAMPDIFF (YEAR, BIRTDAYCOLUMN, CURDATE()) FROM TABLE AS AGE
字符串
pw9qyyiw2#
虚列不能使用动态函数,如果你需要一个方法来获取sql中的age值,你可以使用view。例如:mysql> show create table t_user;| t_user |CREATE TABLE t_user(id bigint(20)NOT NULL AUTO_INCREMENT,name varchar(255)DEFAULT NULL,birthday datetime DEFAULT NULL,PRIMARY KEY(id))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1|组中1行(0.00秒)mysql> select * from t_user;+-——-+-——————-+-———————————————————-+| 名称,名称|生日| birthday |+-——-+-——————-+-———————————————————-+| 明|2011-07-1700:00:00| 2011-07-1700:00:00 |+-——-+-——————-+-———————————————————-+然后你可以使用一个view create view t_user_with_age as select id,name,birthday,floor(datediff(curdate(),birthday)/365)from t_user;mysql> select * from t_user_with_age;+-——-+-————-+-———————————————————-+-————-+| 名称,名称|生日|年龄| age |+-——-+-————-+-———————————————————-+-————-+| 明|2011-07-17 00:00:00|十二岁| 12 |+-——-+-————-+-———————————————————-+-————-+组中1行(0.01秒)
t_user
id
name
birthday
2条答案
按热度按时间tyu7yeag1#
可以使用以下表达式:
字符串
pw9qyyiw2#
虚列不能使用动态函数,如果你需要一个方法来获取sql中的age值,你可以使用view。
例如:mysql> show create table t_user;
| t_user |
CREATE TABLE
t_user
(id
bigint(20)NOT NULL AUTO_INCREMENT,name
varchar(255)DEFAULT NULL,birthday
datetime DEFAULT NULL,PRIMARY KEY(id
))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1|
组中1行(0.00秒)
mysql> select * from t_user;
+-——-+-——————-+-———————————————————-+
| 名称,名称|生日| birthday |
+-——-+-——————-+-———————————————————-+
| 明|2011-07-1700:00:00| 2011-07-1700:00:00 |
+-——-+-——————-+-———————————————————-+
然后你可以使用一个view create view t_user_with_age as select id,name,birthday,floor(datediff(curdate(),birthday)/365)from t_user;
mysql> select * from t_user_with_age;
+-——-+-————-+-———————————————————-+-————-+
| 名称,名称|生日|年龄| age |
+-——-+-————-+-———————————————————-+-————-+
| 明|2011-07-17 00:00:00|十二岁| 12 |
+-——-+-————-+-———————————————————-+-————-+
组中1行(0.01秒)