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导致的。
Hibernate中HQL的日期差值计算,可计算相差多少秒的更多相关文章
- 九度OJ 1096:日期差值 (日期计算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8138 解决:2752 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据, ...
- 题目1096:日期差值(a-b=(a-c)-(b-c))
http://ac.jobdu.com/problem.php?pid=1096 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每 ...
- Android 获取当前日期距离过期时间的日期差值的完整方法直接使用
/*** * 获取当前日期距离过期时间的日期差值 * @param endTime * @return */public String dateDiff(String endTime) { Strin ...
- 输出有序数组的中两个元素差值为指定值diff的两个元素
题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回: ...
- 九度oj 题目1096:日期差值
题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行, ...
- MVC 下 ajax调用 日期差值计算
背景: 服务项目已有服务期起止时间From-To 现在要根据用户输入的新的起始时间, 和该服务期的原有区间值, 计算出新的服务期截止时间 即 NewServiceToDateTime = NewSer ...
- 关于Java中计算日期差值不准确问题
1.字符串日期相减 如:2016-4-1,必须先将此字符串转成Date对象,并且, 格式必须为:yyyy—MM—dd HH:mm:ss. 如果不转就直接计算(2016-4-1)两个这样的日期,则误差 ...
- Hibernate中HQL函数汇总及获取当前时间进行比较举例
在很多时候,我们负责的项目中,在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,通常的原因是:我们使用了标准的sql语句,开启的确是hiberna ...
- Hibernate中Hql查询
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
随机推荐
- CI框架uri去掉index.php
CI框架的入口是index.php,所以url实际上要多出一个index.php,非常不美观.我使用的是apache服务器,要开启mod_rewrite服务才可以. sudo a2enmod rewr ...
- jQuery 文字截取
HTML <div class="summary"> <p class="news">业内知道,当赵科林“过档”联想之初,恰逢联想 ...
- 滚动到指定元素的id处+当元素出现在浏览器显示区域就会自动加载
//滚动到指定元素的id处 如:$("#Exam82") function Jump() { var scroll_offset = $("#Exam82"). ...
- Hibernate配置文件中映射元素详解
对象标识符号 在关系数据库表中,主键(Primary Key)用来识别记录,并保证每条记录的唯一性.在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两个变量引用的对象值是否相同 ...
- DataTable 导出Excel 下载 (NPOI)
public class ExcelHelper { public void DownLoadExcelNew(System.Data.DataTable data, Hashtable h, ...
- 扩展vbox硬盘大小
1.使用VboxManage list hdds查看所有安装的虚拟机信息 2.找到你要扩展硬盘容量虚拟机的UUID,使用modifyhd命令扩展硬盘大小 VBoxManage modifyhd U ...
- MyEclipse8.5自动生成注册码
package com; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe ...
- Ubuntu apache 禁止目录浏览
$ sudo vim /etc/apache2/sites-enabled/000-default 将Options后面Indexes前面加上"-"表示禁止目录浏览: <Di ...
- Android开源库
http://blog.csdn.net/xiaanming/article/details/9470223 一.兼容类库 ActionBarSherlock : Action Bar是Android ...
- content的定义
http://www.myexception.cn/HTML-CSS/1472528.html http://stackoverflow.com/questions/2770681/css-conte ...