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