问题描述
此连字符在update_at列和created_at 列之间按by子句做什么?
select * from `users` order by updated_at - created_at DESC
解决方法
这是一个负号,因此它从每行的更新日期中减去创建的日期,并使用结果对返回的行进行排序。
都是时间戳记,创建的日期在前,因此是一个较小的数字。创建日期和更新日期之间的差异越大,结果将使用降序排列,而更新和创建日期相同的结果将排在最后。
,看来order by
子句的意图是按两个日期之间的差进行排序。差异最大的行将首先排序。
但是,如果列实际上是类似date
的数据类型,这不太适合在MySQL中正常工作,因为它以违反直觉和不可靠的方式处理日期减法(在幕后,日期隐式地被限制为整数值)。
您应该改用日期函数,例如:
order by unix_timestamp(updated_at) - unix_timestamp(created_at) desc
或者:
order by timestampdiff(second,created_at,updated_at) desc