with tb1 as (
select '当前时间' STARTDATE,'当前时间+一号的时间(1天)' ENDDATE,'1号' HAOMA,'1.000000' CVALUE,'DAY' CVALUE_UOM from dual
union all
select '当前时间+一号的时间(1天)','当前时间+二号的时间(1天)+一号时间(1天)','2号','1.000000','DAY' from dual
union all
select '当前时间+二号的时间(1天)+一号时间(1天)','当前时间+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','3号','2.000000','WEEK' from dual
union all
select '当前时间+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','当前时间+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','4号','2.000000','WEEK' from dual
union all
select '当前时间+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','当前时间+五号的时间(3分钟)+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','5号','3.000000','MINUTE' from dual
)
select * from tb1;-------------------------------------------------------------------------------------------
如何将我的中文字变成相应的oracle语句计算
select '当前时间' STARTDATE,'当前时间+一号的时间(1天)' ENDDATE,'1号' HAOMA,'1.000000' CVALUE,'DAY' CVALUE_UOM from dual
union all
select '当前时间+一号的时间(1天)','当前时间+二号的时间(1天)+一号时间(1天)','2号','1.000000','DAY' from dual
union all
select '当前时间+二号的时间(1天)+一号时间(1天)','当前时间+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','3号','2.000000','WEEK' from dual
union all
select '当前时间+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','当前时间+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','4号','2.000000','WEEK' from dual
union all
select '当前时间+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','当前时间+五号的时间(3分钟)+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','5号','3.000000','MINUTE' from dual
)
select * from tb1;-------------------------------------------------------------------------------------------
如何将我的中文字变成相应的oracle语句计算
解决方案 »
- Drop的视图,如何恢复啊?
- 应用程序SQL跟踪sql_trace使用方法?
- 解决下sql语句,我的老是报ORA-00904:"T"."ORDERID":invalid identifier(字段名错误)
- 一个朋友在国外找工作的面试题目,关系生存问题,请各位大侠救一命
- asp调用oralce数据库存储过程出错!!!大家来看看吧。
- 初学ORACLE PORTAL,问几个安装的问题
- 问一个有关取最大值的函数
- 把存储过程中定义的多个局部变量当一个记录集返回?有谁有办法吗?
- 数据库表的记录删除的问题
- 站在门口很久了,不知怎么进来。
- 哪位大侠能帮我优化一下这个SQL语句
- oracle 10g登陆OEM问题求教高手解决
STARTDATE ENDDATE HAOMA CVALUE CVALUE_UOM
2011-2-9 21:26:00 2011-2-10 21:26:00 1号 1 DAY
2011-2-10 21:26:00 2011-2-11 21:26:00 2号 1 DAY
2011-2-11 21:26:00 2011-2-25 21:26:00 3号 2 WEEK
2011-2-25 21:26:00 2011-3-11 21:26:00 4号 2 WEEK
2011-3-11 21:26:00 2011-3-11 21:29:00 5号 3 MINUTE
还有,一个问题不需要多次发帖的,一次发帖就可以了。
STARTDATE ENDDATE HAOMA CVALUE CVALUE_UOM
null null 1号 1 DAY
null null 2号 1 DAY
null null 3号 2 WEEK
null null 4号 2 WEEK
null null 5号 3 MINUTE
2.(思路)
要将STARTDATE(开始时间) ENDDATE(结束时间)计算出来
其中的思路是当是1号时(开始时间是当前时间)(结束时间是当前时间加上1号这一列中的1DAY,即一天)
当是2号时(开始时间是1号的结束时间)(结束时间是1号的结束时间(也就是2号的开始时间)加上2号这列中的1DAY)
当是3号时(开始时间是2号的结束时间)(结束时间是2号的结束时间(也就是3号的开始时间)加上3号这列中的2 WEEK)
4号和3号算法一样
当5号时最后一个号时(开始时间是4号的结束时间)(结束时间是4号的结束时间(也就是5号的开始时间)加上5号这列的3 MINUTE)
3.结果就是
STARTDATE ENDDATE HAOMA CVALUE CVALUE_UOM
2011-2-9 21:26:00 2011-2-10 21:26:00 1号 1 DAY
2011-2-10 21:26:00 2011-2-11 21:26:00 2号 1 DAY
2011-2-11 21:26:00 2011-2-25 21:26:00 3号 2 WEEK
2011-2-25 21:26:00 2011-3-11 21:26:00 4号 2 WEEK
2011-3-11 21:26:00 2011-3-11 21:29:00 5号 3 MINUTE
这样的了
比如一天是根据字段(CVALUE,CVALUE_UOM)值(1,DAY)得出的
with tab as(
select to_date(null) startdate, to_date(null) enddate, '1号' haoma, 1 cvalue, 'DAY' cvalue_uom from dual
union all
select to_date(null) , to_date(null) , '2号' , 1 , 'DAY' from dual
union all
select to_date(null) , to_date(null) , '3号' , 2 , 'WEEK' from dual
union all
select to_date(null) , to_date(null) , '4号' , 2 , 'WEEK' from dual
union all
select to_date(null) , to_date(null) , '5号' , 3 , 'MINUTE' from dual
)
select lag(enddate,1,sysdate)over(order by haoma) startdate,
case when cvalue_uom='DAY' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue
when cvalue_uom='WEEK' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue*7
when cvalue_uom='MONTH' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue*30
when cvalue_uom='MINUTE' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue/1440
end enddate,
haoma,
cvalue,
cvalue_uom
from tab
--调整下格式:
with tab as(
select to_date(null) startdate, to_date(null) enddate, '1号' haoma, 1 cvalue, 'DAY' cvalue_uom from dual
union all
select to_date(null) , to_date(null) , '2号' , 1 , 'DAY' from dual
union all
select to_date(null) , to_date(null) , '3号' , 2 , 'WEEK' from dual
union all
select to_date(null) , to_date(null) , '4号' , 2 , 'WEEK' from dual
union all
select to_date(null) , to_date(null) , '5号' , 3 , 'MINUTE' from dual
)
select lag(enddate,1,sysdate)over(order by haoma) startdate,
case when cvalue_uom='DAY' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue
when cvalue_uom='WEEK' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue*7
when cvalue_uom='MONTH' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue*30
when cvalue_uom='MINUTE' then
lag(enddate,1,sysdate)over(order by haoma) + cvalue/1440
end enddate,
haoma,
cvalue,
cvalue_uom
from tab
--上面的应该有问题,我修改了下,你试试:
如果不行,明天上班再给你看看,我先睡觉了,刚返回有点累了
with tab as(
select to_date(null) startdate, to_date(null) enddate, '1号' haoma, 1 cvalue, 'DAY' cvalue_uom from dual
union all
select to_date(null) , to_date(null) , '2号' , 1 , 'DAY' from dual
union all
select to_date(null) , to_date(null) , '3号' , 2 , 'WEEK' from dual
union all
select to_date(null) , to_date(null) , '4号' , 2 , 'WEEK' from dual
union all
select to_date(null) , to_date(null) , '5号' , 3 , 'MINUTE' from dual
)
select Lag(enddate,1,startdate)over(order by haoma) startdate,
enddate,
haoma,
cvalue,
cvalue_uom
from(
select nvl(enddate,sysdate) startdate,
nvl(enddate,sysdate) +
sum(
case when cvalue_uom='DAY' then cvalue
when cvalue_uom='WEEK' then cvalue*7
when cvalue_uom='MONTH' then cvalue*30
when cvalue_uom='MINUTE' then cvalue/1440
end
)over(order by haoma) enddate,
haoma,
cvalue,
cvalue_uom
from tab
)