Hibernate中HQL的日期差值计算,可计算相差多少秒

  最近有个业务需求就是计算订单创建时间离现在超过 4 小时的订单都查找出来! 那么就需要用到日期函数了。 网上找了一下总共的日期函数有一下几个:

CURRENT_DATE() 返回数据库当前日期 时间函数 JPAQL HQL CURRENT_DATE() 返回数据库当前日期
CURRENT_TIME() 时间 时间函数 JPAQL HQL CURRENT_TIME() 返回数据库当前时间
SECOND(d) 从日期中提取具体秒 时间函数 HQL SECOND(时间字段) 空的时候返回null
MINUTE(d) 从日期中提取具体分 时间函数 HQL MINUTE(时间字段) 空的时候返回null
HOUR(d) 从日期中提取具体小时 时间函数 HQL HOUR(时间字段 空的时候返回null
DAY(d) 从日期中提取具体天 时间函数 HQL DAY(时间字段) 空的时候返回null
MONTH(d) 从日期中提取具体月 时间函数 HQL MONTH(时间字段) 空的时候返回null
YEAR(d) 从日期中提取具体年 时间函数 HQL YEAR(时间字段) 空的时候返回null

  显然这个不能满足需求,CURRENT_DATE 最后得出来的结果是:2015-07-18    而CURRENT_TIME()得出来的结果是:14:40:58,不算是一个日期类型,然后我百度了一下找到了这个函数  CURRENT_TIMESTAMP(),确定是可以使用的。返回的是:2015-07-18 14:40:58, OK。满足了现在的需求。接下来就是计算两个日期类型的差值的问题:

  问题来了:CURRENT_TIMESTAMP() - createTime,当CURRENT_TIMESTAMP()为2015-07-18 14:42:55,createTime为:2015-07-15 10:30:21,返回的结果居然是:3041234,无法相信自己的眼睛。其实这个值也是有规律可循的, 每2位数表示一个 年 月 日 时 分 秒。

  那么,34 :表示相差34秒

12:表示相差12分

04:表示相差4小时

以此类推。

当然也回存在以下的数值:2961512。这个怎么理解呢? 首先,12秒,15分很好理解,跑出来一个 96?莫非是96小时?   当然答案是错误的,因为当结算小时差时,被减数的值小于减数,那么就必须借位,即算法为:  24-(100-96) = 20,相差20小时,同理分钟位如果是 81,那么相差分钟数为:60-(100-81)=41分,以此类推。

基本的算法懂了,那么问题就好解决了,相差4小时,那么只需要满足  (CURRENT_TIMESTAMP() - createTime)>40000即可,4分钟只需要满足 (CURRENT_TIMESTAMP() - createTime)>400即可,其它以此类推!

我找不到更好的计算两个日期类型的差值的方法,只能用这个笨方法了,不知道网友们可有其它好的解决办法供参考参考! 我相信这个需求其实还是非常大的。这个问题的缘由也是因为项目不能用原生的SQL导致的。

时间: 2024-10-14 00:37:52

Hibernate中HQL的日期差值计算,可计算相差多少秒的相关文章

日期差值

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 来源: 2009年上海交通大学计算机研究生机试真题 #include <iostream> using namespace std; #define ISYEAR(x) x%100 != 0 && x%4

题目1096:日期差值 (2009年上海交通大学计算机研究生机试真题)

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 代码如下: #include "stdio.h" int dayOfMonth[13][2]={ 0,0, 31,31, 28,29, 31,31, 30,30, 31,31, 30,30, 31,31, 31,

九度oj 题目1096:日期差值

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #include

九度OJ 1096 日期差值

题目1096:日期差值 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5143 解决:1789 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 #include<stdio.h> #include<string.h> #include<s

九度题目1096:日期差值

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 #include<stdio.h> #include<algorithm> #include<iostream> #include<stack> #include<vector&

题目1096:日期差值 Java/C++

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 Java AC 代码: import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[]

1096.日期差值

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 #include<stdio.h> #define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0?1:0 int dayofmonth[13][2]= { 0,0, 3

MVC 下 ajax调用 日期差值计算

背景: 服务项目已有服务期起止时间From-To 现在要根据用户输入的新的起始时间, 和该服务期的原有区间值, 计算出新的服务期截止时间 即 NewServiceToDateTime = NewServiceFromDateTime + ( OldServiceToDateTime - OldServiceFromDateTime) 本示例的效果: 1.日期转换 及 差值计算 2.mvc 下 ajax 调用及赋值 相关代码如下: 后台Controller下Action处理 public Date

Hibernate中HQL函数汇总及其说明

Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.以下就是HQL的一些常用函数,有了这些函数,我们就可以拥有更多的灵活性,比如HQL如何取余,HQL如何返回集合的最值,HQL字符串处理,