PL / SQL时差

时间:2013-03-28 06:51:18

标签: sql oracle plsql

我没有任何PL / SQL经验,但我认为我需要它。

我有以下问题:

我有一张表格,其中包含:

Object  Station Time
744          2  23:40:00
744          3  23:45:00
744          4  23:48:00
744          8  23:59:00
744          9  00:02:00
744          13 00:15:00

现在我需要一个带日期的新字段:

Object  Station Time    Date
744          2  23:40:00    26.03.2013
744          3  23:45:00    26.03.2013
744          4  23:48:00    26.03.2013
744          8  23:59:00    26.03.2013
744          9  00:02:00    27.03.2013
744         13  00:15:00    27.03.2013

如果时间已达到00:00:00

,您可以看到日期已更改

在SQL中我不知道如何做到这一点 - 所以现在我认为我需要一个PL / SQL脚本来创建日期。

2 个答案:

答案 0 :(得分:0)

既然既没有说明创建表的数据类型,也没有说明表可以包含哪些可能的值,也没有说明为什么要生成所需的结果,那么就无法找到正确的解决方案。但你可能会从像

这样的东西开始
create table tq84_t (
  station  number,
  time     varchar2(8)
);

insert into tq84_t values ( 2, '23:40:00');
insert into tq84_t values ( 3, '23:45:00');
insert into tq84_t values ( 4, '23:48:00');
insert into tq84_t values ( 8, '23:59:00');
insert into tq84_t values ( 9, '00:02:00');
insert into tq84_t values (13, '00:15:00');

select 
  station,
  time,
  to_char(trunc(sysdate) -1 +
         sum(next_day) over (order by station), 'dd.mm.yyyy') date_
from (
  select
     case when nvl(lag(time) over (order by station), chr(0)) < time 
          then 0 
          else 1 end next_day,
    time,
    station
  from
    tq84_t
)
order by 
  station;

答案 1 :(得分:-2)

INSERT INTO #your_table
SELECT 744 as OBJECT, 13 as Station , '00:15:00' as your time , CONVERT(varchar ,  GETDATE(), 103)

^^这仅在您插入当前日值时才有效;

或者您只需使用DATETIME Field

即可
CREATE TABLE #yortable 
(OBJECT INT, Station int ,  Arrival_date datetime )
例如你有公交车站,它应该到达'2013/03/28 23:30:00'并且不迟到。你只需为它增加价值

update #yortable 
set Arrival_date  = DATEADD(mi, 31, Arrival_date  ) 
WHERE Station=1 and object=744
分钟 呃 - 小时 ss - 第二次

结果

  

'2013/03/29 00:01:00'