DATEDIFF() 参数问题
Posted
技术标签:
【中文标题】DATEDIFF() 参数问题【英文标题】:DATEDIFF() Parameter Issue 【发布时间】:2013-09-20 20:44:19 【问题描述】:旧的 DATEDIFF() 允许用户使用 3 个参数,我正在尝试这样做,以便我可以从我的 DATEDIFF 中获得几个小时而不是几天,(我试图显示发布后的小时数)。在我的数据库中,我使用 TIMESTAMP 和这行代码来提取一个值,显然它不起作用,因为我有额外的参数。一旦我删除了“小时”或“小时”,查询就会运行并返回一个以天为单位的值。
SELECT DATEDIFF(hour, CURDATE(), (SELECT Post_Date FROM Post_T WHERE pk_PostID = 1) )
有没有一种简单的方法可以返回每小时值?
我也在使用 mysql 版本 5.5.20。
【问题讨论】:
DATEDIFF 确实使用 3 个参数:DATEDIFF(datepart, date1, date2)。小时的日期部分是小时或小时。您遇到了什么问题? 从 5.1 开始,我认为他们改变了它,dev.mysql.com/doc/refman/5.1/en/…,它只需要两个参数。当我在查询中执行 'hour' 或 'hh' 时,它返回错误 #1582 - Incorrect parameter count in call to native function 'DATEDIFF' 【参考方案1】:就像documentation 中所说的:
DATEDIFF(expr1,expr2)
DATEDIFF() 返回 expr1 – expr2 表示为 days 的值,从一个 约会对方。 expr1 和 expr2 是日期或日期和时间 表达式。只有值的日期部分用于 计算。
如果您想要以小时为单位的结果,您应该使用Timestampdiff
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
返回 datetime_expr2 – datetime_expr1,其中 datetime_expr1 和 datetime_expr2 是日期或日期时间表达式。一种表达方式可能是 一个日期,另一个是日期时间;日期值被视为日期时间 必要时有时间部分'00:00:00'。单位为 结果(整数)由 unit 参数给出。
单位参数可以是:MICROSECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or 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() 来解决。非常感谢! 很高兴它成功了。起初我打算建议 now(),但我看到你已经到了那里 :)以上是关于DATEDIFF() 参数问题的主要内容,如果未能解决你的问题,请参考以下文章