我有一个学生数据库,其中有一个注册日期栏。我需要在sql上运行一个查询,以便查找这个日期和今天的日期,并显示yy年和mm月的差异。
我正在使用TIMESTAMPDIFF来计算这些日期之间的差异,但只能产生一个值,我如何调整它来计算整个行的值呢?我需要用这个数据创建一个新列。
这是一个查询:
SELECT TIMESTAMPDIFF(MONTH, CURDATE(), (SELECT time_enrolled FROM student) )
AS newDate
如果在结尾添加一个“where”语句,就会得到指定的id,例如:
SELECT TIMESTAMPDIFF(MONTH, CURDATE(), (SELECT time_enrolled FROM student WHERE f_id = 4) )
AS newDate
不要使用子查询。您的原始查询应为:
SELECT TIMESTAMPDIFF(MONTH, CURDATE(), time_enrolled) AS newDate
FROM student;
如果子查询在标量上下文中返回多行(例如在select
语句中返回值),则该子查询将生成错误。
如果愿意,可以向此查询添加适当的where
子句。
编辑:
若要获得年和月,请使用模运算:
SELECT floor(TIMESTAMPDIFF(MONTH, CURDATE(), time_enrolled) / 12) as years,
mod(TIMESTAMPDIFF(MONTH, CURDATE(), time_enrolled), 12) as months
FROM student;