问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库时间处理

发布网友 发布时间:2022-04-30 10:24

我来回答

1个回答

热心网友 时间:2022-06-21 03:34

1.分钟转成不同格式的时间

数据库里有个字段 存的分钟

① 现在想显示成HH:MM格式 假设为514分钟

SELECT to_char((to_date('00:00','HH24:MI')+514/24/60),'HH24:MI') from al

输出结果:

08:34

②如果存的是秒 同理

SELECT to_char((to_date('00:00:00','HH24:MI:SS')+514/24/60/60),'HH24:MI:SS') from al

输出结果:

00:08:34

至于显示成其他的格式,也就不成问题了

2.时分相加

至于为什么要写这个,是因为Oracle里没有两个时间相加的处理,两个to_date相减可以,相加就出错了:

数据库里有两个字段 存的都是HH:MM格式的时间

假设一个是本月上午缺勤时间合计: 08:30(8个半小时)

另外一个是本月下午缺勤时间合计: 00:30(半小时)

现在想要总缺勤时间,显示成 HH:MM格式

做法有两种

① 正常的逻辑运算(代码或者PLSQL实现的应该比这个容易的多,仅限于SQL实现):

select LPAD((substr('08:30',1,2) + substr('00:30',1,2)+(substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))/60),2,'0') || ':' || LPAD(mod((substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2)),60),2,'0') from al

看起来很复杂,而实际上就是把小时相加,分钟相加,之后把分钟满60的小时进位,取余的显示:

取前两位相加得小时:(是因为不确定数据储存的格式是不是严格的HH:MM,而不能借正则分隔“:”)

(substr('08:30',1,2) + substr('00:30',1,2)

取后两位相加得分钟:

(substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))

把分钟满60的小时进位得显示用的小时: (substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))/60

现在小时算完了,不足两位左补零:

LPAD((substr('08:30',1,2) + substr('00:30',1,2)+(substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))/60),2,'0')

把分钟取余得显示用的分钟:

mod((substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2)),60)

现在分钟算完了,不足两位左补零: LPAD(mod((substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2)),60),2,'0')

最后连上“:”就变成上述的SQL,得到的时间用HH:MM显示了

输出结果:

09:00

②函数实现:

SELECT to_char(to_date('00:00','HH24:MI') +(((to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60 + (to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60)/24/60),'HH24:MI') from al

首先把HH:MM的换成数值:

to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))

输出结果:.354166666666666666666666666666666666666(其实是代表了一个时间,是以天为单位的)

现在*24*60 把数值换成分钟:

(to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60

输出结果:510

也就是把08:30 变成了510分

(to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60

输出结果:30(时间是.020833333333333333333333333333333333333)这两个

也就是把00:30 变成了30分

然后把两个分钟相加:

((to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60 + (to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60)

输出结果:540

剩下的就是显示处理了,和1里面的做法一致:

to_char(to_date('00:00','HH24:MI') +(((to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60 + (to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60)/24/60),'HH24:MI')

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果只有铬黑T试剂,能否测定钙离子,如何测定? 金银花茶的做法窍门 怎样制作金银花茶 怎么快速取消订单 有关"听"开头的成语 王卡看腾讯视频不显示免流 大王卡腾讯视频不显示免流 谁给推荐几部国产的好看的、卟幼稚的、新鲜的动画片 好看的、不幼稚的国产动画片有哪些? 太早的不要,要连续动画片 上传速度慢是什么原因? 宋祖儿的演技水平如何? 宋祖儿新剧 宋祖儿有气质吗?她的哪些穿着比较时尚? 宋祖儿的简历 宋祖儿电视剧 宋祖儿一组生活照曝光,大家觉得她的穿搭怎么样呢? 宋祖儿结婚了吗 宋祖儿有哪些代表作?你最喜欢哪一个? 宋祖儿原名是什么? 微信客服为什么都是留言,就没个活人吗? 怎么也等不到腾讯人工客服?他们的智能客服好不? 英国天才秀评委 求一达人秀女评委资料 精灵语是谁创造的? 土豪十七岁用英文怎么说? celebtate的名词有几个,分别是?comfortable的名词有几个,分别是? 求[Maho.sub][Celeb]惩罚指导(おし おき)~学园令嬢更性计画~ 无耻之徒第六季Ian的黑人男朋友Celeb的演员叫什么? 都下载了三星应用商店为什么安装不了三星的celeb alarm? 2k13中celeb team 是什么队伍 excel 数据处理。时间数据,大于某个时间点的选择做处理 hrm分析流程中数据分析和处理大约需要多长时间 PLC数据处理与位处理时间不同吗 雪菜炒笋怎么做好吃 雪菜炒小笋怎么做 雪菜炒春笋怎么做好吃 雪菜春笋的做法,雪菜春笋怎么做好吃,雪菜春笋 excel2010将日期数据和时间数据均视为什么数据处理? 炒雪菜笋怎么做? 电算化系统数据处理过程对时间的有关规定 视频软件投屏后可不可以我投完屏后我退出后玩别的吗,电视上会显示吗 mba 非全 几年 SPSS或者Clementine里面的数据处理时间? 如何处理两列时间不同的数据? 我全屏看优酷视频,退出后桌面图标就都没了,怎么办啊! 如何对时间单位的数据标准化处理? 雪菜炒冬笋的做法,雪菜炒冬笋怎么做 报考人大mba需要哪些做哪些准备? 雪菜笋丝的家常做法 报考全日制mba的条件