Oracle时间处理和报表分时段统计

本文介绍了在Oracle中处理时间以进行报表分时段统计的方法,包括使用to_char()函数将时间转换为日期和小时,并处理字符串形式的时间。同时,还展示了Java中日期和时间的转换操作。此外,提供了一个Oracle函数FormatTime,用于将秒数转换为时分秒格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是在报表工具中的sql的写法:

1、之前做的报表,有一张需要展现为分时段统计,就是8-9点,9-10点各项的数据为多少。

2、这里需要在查出各类数据的同时也把数据里的时间查询出来,当然要处理一下,时间要做两步处理,一个把时间转换成日期,一个把时间转换成小时,最后所有的数据按日期和小时分组。

3、关于时间格式转换成日期和小时,需要用到to_char()函数,to_char(time, 'yyyy-mm-dd')可以把时间转成日期,to_char(time, 'hh24')把时间转换成小时。但是这里的time要求是date类型。

4、关于时间,我们存储为字符串形式,这样就不能直接转换,而且oracle的时间格式和java的不一样,

java表示年月日时分秒:yyyy-MM-dd HH:mm:ss,如果是12小时制,则为:yyyy-MM-dd hh:mm:ss

oracle表示年月日时分秒:yyyy-MM-dd hh24:mi:ss

5、最终,时间的两步处理为:

转成日期:to_char(TO_DATE('2017-08-01 00:00:00', 'yyyy-MM-dd hh24:mi:ss'),'yyyy-mm-dd')

转成小时:to_char(TO_DATE('2017-08-01 00:00:00', 'yyyy-MM-dd hh24:mi:ss'),'hh24')


下面是java中的时间处理:

1、获取当前时间 Date now = new Date();

2、时间字符串转Date(要处理异常) :

String time = "2017-10-31 19:06:00";

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //MM月,mm分钟

Date date = sdf.parse(time);

3、Date转字符串

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

String createdate = sdf.format(date);


下面是oracle秒转时分秒函数:

CREATE OR REPLACE FUNCTION FormatTime
(
inTime NUMBER
)RETURN VARCHAR2
AS
v_Time NUMBER(10);
tValue NUMBER(4);
tStrTime VARCHAR2(10);

BEGIN

-- RETURN TO_CHAR(ROUND(inTime, 1));
IF inTime > 10000*3600 THEN
tStrTime := '9999:59:59';
RETURN tStrTime;
ELSIF inTime <= 0 THEN
tStrTime := '0:00:00';
RETURN tStrTime;
END IF;
v_Time := inTime;

tStrTime := to_char(floor(v_Time/3600))||':';

tValue := floor(MOD(v_Time,3600)/60);
IF tValue<10 THEN
tStrTime := tStrTime ||'0'||to_char(tValue)||':';
ELSE
tStrTime := tStrTime ||to_char(tValue)||':';
END IF;

tValue := MOD(v_Time,60);
IF tValue<10 THEN
tStrTime := tStrTime ||'0'||to_char(tValue);
ELSE
tStrTime := tStrTime ||to_char(tValue);
END IF;

RETURN tStrTime;

END FormatTime;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值