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语句计算

解决方案 »

  1.   

    其中的天,周,分是根据不同的CVALUE_UOM计算得出的
      

  2.   

    想得到的结果是
    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
      

  3.   

    需求不是很清楚?能否说详细点,并给出你的SQL初始数据脚本和你数据结果,这样好理解点,你两个帖子我没看懂,真的。
    还有,一个问题不需要多次发帖的,一次发帖就可以了。
      

  4.   

    1.(这个就是数据库中的初始值)
    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
    这样的了
      

  5.   

    其中就是那个加上的东西不好搞,因为是两个字段的
    比如一天是根据字段(CVALUE,CVALUE_UOM)值(1,DAY)得出的
      

  6.   

    你CVALUE_UOM字段值的情况是定的吗?时,分,秒,天,周,月,季度,年。
      

  7.   

    --我在家没环境测试,你试试:
    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
      

  8.   


    --调整下格式:
    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
      

  9.   


    --上面的应该有问题,我修改了下,你试试:
    如果不行,明天上班再给你看看,我先睡觉了,刚返回有点累了
    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
    )