您的位置:首页 > 其它

hql相关

2016-07-13 14:49 267 查看
需求:需要查询一批订单,根据订单中时间,每隔24h之后执行某些操作。

实现:

1、查询符合要求的数据

1.1、从字段信息里截取出时间字段:substring(str,2,14) 。三个参数分别代表:字段名,从第几位开始截取(坐标从1开始),截取长度。

1.2、如何判断当前时间与订单中时间是否相隔24h了呢?我想的是两个时间差,24取余=0

1.2.1、两时间差,这里我用的TIMESTAMPDIFF(
unit
,
datetime_expr1
,
datetime_expr2
)。unit取hour。

SELECT MOD(TIMESTAMPDIFF(HOUR,'2016-06-29 16:00:00','2016-07-13 17:00:00'),24) from dual

unit:可选值:

FRAC_SECOND(微秒),SECOND(秒),MINUTE(分钟),HOUR(小时),DAY(天),WEEK (星期),MONTH(月),QUARTER(季度),YEAR (年)

1.2.2、当前时间获取方式:

select current_date(), current_time(), current_timestamp() from dual;

current_date():2016-07-13

current_time() :14:39:58

current_timestamp():2016-07-13 14:39:58

1.2.3、求绝对值,开平方,求余

select abs(t.p1),sqrt(t.p1),mod(t.p1, 2) from test t;

1.2.4、Floor(X) 向下取整 Floor(0.2)=0;Floor(15.8)=15

查询语句:

SELECT o.partnerOrderId,o.DVAuthMethod,DVAuthKey,o.DVAuthValue,
MOD(TIMESTAMPDIFF(HOUR,substring(o.dvAuthValue,2,14),current_timestamp()),24) FROM Orders o
WHERE o.source='aliyun'
and (o.dvAuthMethod = 'FILE' or o.dvAuthMethod ='DNS')
and o.preRemove != 1 and substring(o.dvAuthValue,2,8)!=current_date()


2、每隔1h从数据库查询一次放入redis列表

3、每隔10min执行从redis列表取数据进行相关操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hql timestamp