2014-11-02 20 views
0

我有一个学生数据库,它有一个注册日期列。我需要在sql上运行一个查询,查看这个日期和今天的日期,并显示yy年 - 毫米月的差异。TIMESTAMPDIFF,新列上的多行结果

我正在使用TIMESTAMPDIFF来计算这些日期之间的差异,但只能生成一个值,我如何适应它来解决整行问题?我需要用这些数据创建一个新列。

这是查询:

SELECT TIMESTAMPDIFF(MONTH, CURDATE(), (SELECT time_enrolled FROM student)) 
AS newDate 

如果我在最后加“其中”声明我得到例如指定id:

SELECT TIMESTAMPDIFF(MONTH, CURDATE(), (SELECT time_enrolled FROM student WHERE f_id = 4)) 
AS newDate 

回答

0

不要使用子查询。你原来的查询应该是:如果它在一个标量环境中返回多行

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; 
+0

由于该诀窍。 – 2014-11-02 16:48:33

+0

另外,如何将这些数据作为永久性列插入到新列中,以及如何将结果更改为多年的任何想法,例如,我得到的其中一个值是78,如何将它格式化为显示为6年6个月,非常感谢您的帮助。 – 2014-11-02 21:59:07

+0

对于新的列,你可以使用'alter table'和'update'。 – 2014-11-03 03:02:30