0

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 スクリプトが必要だと思います。

4

2 に答える 2

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;
于 2013-03-28T07:34:58.967 に答える
-2
INSERT INTO #your_table
SELECT 744 as OBJECT, 13 as Station , '00:15:00' as your time , CONVERT(varchar ,  GETDATE(), 103)

^^これは、現在の日の値を挿入した場合にのみ機能します。

または、DATETIME フィールドで簡単に実行できます

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

mi - 分 hh - 時 ss - 秒

結果

「2013/03/29 00:01:00」

于 2013-03-28T07:20:38.070 に答える