TIMESTAMPDIFF,新列上的多行结果

时间:2014-11-02 16:39:21

标签: mysql phpmyadmin

我有一个学生数据库,其中包含注册日期列。我需要在sql上运行一个查询,让我们查看这个日期和今天的日期,并显示yy Years mm Months的差异。

我正在使用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

1 个答案:

答案 0 :(得分:1)

不要使用子查询。您的原始查询应为:

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;