DATEDIFF()参数问题

10

原先的DATEDIFF()函数允许用户使用3个参数,而我尝试这样做是为了从我的DATEDIFF中获取小时数,而不是天数(我正在显示自发布以来的小时数)。在我的数据库中,我使用一个TIMESTAMP和这行代码来提取一个值,很显然它不能工作,因为我有额外的参数。一旦我删除“hour”或“hh”,查询就会运行并返回天数。

SELECT DATEDIFF((SELECT Post_Date FROM Post_T WHERE pk_PostID = 1), CURDATE())*24

有没有简单的方法可以返回小时值?

另外,我正在使用MYSQL Version 5.5.20。


DATEDIFF函数使用3个参数:DATEDIFF(datepart, date1, date2)。小时的日期部分为hour或hh。您遇到了什么问题? - Metaphor
从5.1版本开始,我认为他们对此进行了更改,http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff,现在它只需要两个参数。当我在查询中使用“hour”或“hh”时,它会返回错误#1582-调用本机函数“DATEDIFF”的参数计数不正确。 - pcort
1个回答

31

文档中所述:

DATEDIFF(expr1,expr2)

DATEDIFF()将expr1和expr2表示为从一个日期到另一个日期的天数。 expr1和expr2是日期或日期时间表达式,仅使用值的日期部分进行计算。

如果您想要以小时为单位的结果,则应使用Timestampdiff

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

返回datetime_expr2 - datetime_expr1,其中datetime_expr1和datetime_expr2是日期或日期时间表达式。 一个表达式可以是日期,另一个可以是日期时间; 如果需要,日期值将被视为具有时间部分“00:00:00”的日期时间。 结果(整数)的单位由unit参数给出。

单位参数可以是:MICROSECOND(微秒),SECOND(秒),MINUTE(分钟),HOUR(小时),DAY(天),WEEK(周),MONTH(月),QUARTER(季度)或YEAR(年)。

在您的情况下,您可以执行以下操作:

SELECT TIMESTAMPDIFF(hour, CURDATE(), (SELECT Post_Date FROM Post_T WHERE pk_PostID = 1) )

非常感谢!我遇到的唯一问题是CURDATE()只接受YYYY-MM-DD格式,不包括时间,因此默认为YYYY-MM-DD 00:00:00,这会干扰我想要完成的任务。这很容易通过使用NOW()而不是CURDATE()来解决。非常感谢! - pcort
很高兴它起作用了。我一开始想建议使用now(),但是我看到你已经做到了 :) - Filipe Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接