我有一个学生数据库,其中有一个“注册日期”列。我需要在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;

10-05 19:53