2013-03-28 134 views
0

我對PL/SQL沒有任何經驗,但我認爲我需要它。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腳本來創建日期。

+3

你怎麼知道第一行是在2013年3月26日?你如何分類餐桌?我們是否需要解析看起來是由兩個數值組成的'varchar2'的'Object'列? – 2013-03-28 06:54:26

+1

日期從哪裏來?你是否總是想用當前日期作爲基準日期? – 2013-03-28 06:54:34

+0

應該自動生成日期。 如果時間<23:59:00應放置trunc(sysdate-1),否則取sysdate。 我的想法是: 我必須爲每個工作站提供一個時間信息,並且如果時間信息<如前所設置的時間trunc(sysdate) – user1856981 2013-03-28 07:03:03

回答

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

^^這隻適用於插入當前日期值;

,或者你可以簡單地用時間字段

CREATE TABLE #yortable 
(OBJECT INT, Station int , Arrival_date datetime) 

做到這一點,例如,你有公交車站,就應該在「2013年3月28日23:30:00」和UNF到達時間已晚。只需添加值到它

update #yortable 
set Arrival_date = DATEADD(mi, 31, Arrival_date ) 
WHERE Station=1 and object=744 

MI-分鐘 HH - 小時 SS - 第二

結果

'2013年3月29日00:01:00'

+0

這是無效的Oracle SQL – 2013-03-28 07:39:38

+0

我有一個對象,有站的時間信息如果下一站時間<作爲設置sysdate其他sysdate-1之前的站時間但是,我只能用PL/SQL腳本?新字段是日期類型 – user1856981 2013-03-28 11:10:25

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;