我们公司的数据库在表中都是用两列分别记录日期和时间的,怎么用sql得出时间差?

wd123 2004-11-22 10:15:58
如有四列:
start_date start_time end_date end_time
2004-11-01 17:30:31 2004-11-20 16:21:21

我要的到 2004-11-20 16:21:21 到 2004-11-01 17:30:31 之间的小时数(四舍五入),怎样用SQl来表达?
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wd123 2004-11-24
  • 打赏
  • 举报
回复
hehe,给分.
zealot_zk 2004-11-23
  • 打赏
  • 举报
回复
如果你的数据都是用字符串存储的,那可以把两个串拼接成一个串然后转换成时间类型的数据进行运算:

select
(to_date(trim(start_date)||trim(start_time),'YYYY-MM-DDHH24:MI:SS')
- to_date(trim(end_date)||trim(end_time),'YYYY-MM-DDHH24:MI:SS'))
from table_name;

这样计算出来的结果是以天为单位的一个小数,如果你要进行小时,分钟的转换,自己在后面作相应的处理就可以了
wd123 2004-11-23
  • 打赏
  • 举报
回复
我想最后应改为:

*24*60/60,1)

可以得到最小0.1小时.
zhpsam109 2004-11-22
  • 打赏
  • 举报
回复
学习!
baojianjun 2004-11-22
  • 打赏
  • 举报
回复
select round((to_date(to_char(end_date,'yyyy-mm-dd')||' '||to_char(end_time,'hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')-to_date(to_char(start_date,'yyyy-mm-dd')||' '||to_char(start_time,'hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*60)
from table name
where ......
zmgowin 2004-11-22
  • 打赏
  • 举报
回复
select
round(to_date(start_date||' '||start_time,'yyyy-mm-dd hh24:mi:ss')- to_date(end_date||' '||end_time,'yyyy-mm-dd hh24:mi:ss'))*60
from tab;
baojianjun 2004-11-22
  • 打赏
  • 举报
回复
select round((to_date(to_char(start_date,'yyyy-mm-dd')||' '||to_char(start_time,'hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')-to_date(to_char(end_date,'yyyy-mm-dd')||' '||to_char(end_time,'hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*60)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧