【问题标题】:How to find the date closer to another date using mysql query如何使用mysql查询找到更接近另一个日期的日期
【发布时间】:2015-12-06 04:41:27
【问题描述】:

我想检索一个日期字段的值更接近给定日期的记录。我应该如何继续?

下面是表格,

id |employeeid|region |startdate  |enddate  |
 1  1234         abc   2014-11-24  2015-01-17
 2  1234         xyz   2015-01-18  9999-12-31

在这里,我应该检索结束日期更接近另一条记录的开始日期的记录,例如“2015-01-18”,因此它应该检索第一条记录。我尝试了以下查询

1.

SELECT l.region
FROM ABC.location l where l.EmployeeId=1234
ORDER BY ABS( DATEDIFF('2015-01-18',l.Enddate) );

2.

SELECT l.region
FROM ABC.location l where l.EmployeeId=1234
ORDER BY ABS( DATEDIFF(l.Enddate,'2015-01-18') );

但是,它们都不起作用。请帮助我。

谢谢, 普尔娜。

【问题讨论】:

    标签: java mysql sql hibernate date


    【解决方案1】:

    你可能想试试这个:

    Query query = session.createQuery("SELECT l.region, ABS( DATEDIFF('2015-01-18',l.Enddate) ) as resultDiff FROM ABC.location l where l.EmployeeId=1234 ORDER BY resultDiff");
    query.setFirstResult(0);
    query.setMaxResults(1); 
    List result = query.list();
    

    【讨论】:

    • 如果返回 11 行怎么办?
    • 在末尾添加限制 1
    • 谢谢尼尔。但是在休眠状态下,“LIMIT 1”条件不起作用。然后它从数据库中检索所有记录。您对此有什么建议吗?
    • 嗨 Niel,我也试过了。但是堆栈跟踪出现异常,如下所示,“没有 Hibernate Session 绑定到线程,并且配置不允许在此处创建非事务性会话"
    • 嗨 Niel,我也试过了。但是堆栈跟踪出现异常,如下所示,“没有 Hibernate Session 绑定到线程,并且配置不允许在此处创建非事务性会话”。我通常使用 hibernatetemplate 来创建查询。你能建议我如何使用 hibernatetemplate 编写相同的内容吗?谢谢,Poorna。
    【解决方案2】:

    好吧,Unix 时间戳表示为自 1970 年 1 月 1 日以来的秒数,所以如果你从另一个中减去一个,你就会得到以秒为单位的差异。那么,天数的差异就是除以一天中的秒数:

    (date_modified - date_submitted) / (24*60*60) 或

    (date_modified - date_submitted) / 86400

    获取它们中的最小值。 参考这个问题可能会有所帮助::::Selecting the minimum difference between two dates in Oracle when the dates are represented as UNIX timestamps

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 2016-12-16
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      相关资源
      最近更新 更多