【问题标题】:Not able to get the correct rows returned with datediff无法使用 datediff 返回正确的行
【发布时间】:2018-07-17 17:52:20
【问题描述】:

我有 2 张桌子:

  • 图片:picture_id、picture_date
  • picture_user:pictured_id,user_id(发布图片的用户)

我想获得在不到一年的时间内发布图片的用户。我得到了三列(piduseridp_date),但也返回了一些 p_date 大于 1 年的行。

SELECT p_picuser.pid,p_date,userid from p_pictures, p_picuser 
where p_pictures.pid=p_picuser.pid  
    AND (datediff(STR_TO_DATE(p_date, '%Y-%m-%d'),CURDATE())<365)

【问题讨论】:

  • 您能否发布一些示例数据以及您的预期结果?

标签: mysql datediff


【解决方案1】:

MySQL 文档指出 datediff 是 date1 - date2。 https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_datediff

如果您将现在与过去的日期进行比较(试图找出某物的年龄),则需要从 curdate() 中减去这些日期——而不是相反。

请参阅文档中的这些示例:

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
        -> 1
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
        -> -31

【讨论】:

  • 好吧,我改变了他们的订单,它的工作量很大,但为什么现在能工作,我不明白你能不能给点启发
  • datediff 函数总是从第一个参数中减去第二个参数,就像我添加的示例一样。如果你把它们按错误的顺序排列,这不是一个错误,但你可能会得到一个否定的结果。否定结果将始终小于您的 365 比较。
猜你喜欢
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
相关资源
最近更新 更多