2016-12-05 29 views
0

我在寫一個查詢來選擇一些記錄。我有這個數據:Oracle和DateTime數學

Event Table 
------------------ 
Definition 
    EVE_RID   NUMBER(10) 
    EVE_START_DATE Date 

Data: 
    EVE_RID  EVE_START_DATE 
    156891  11/1/2016 

Agenda Table 
------------------ 
Definition: 
    AGD_EVE_RID  NUMBER(10) 
    AGD_DAY   NUMBER(2) 
    AGD_START_TIME NUMBER(4) 

Data: 
AGD_EVE_RID  AGD_DAY  AGD_START_TIME 
156891   1   1000  
156891   1   1400  
156891   8   1000  
156891   8   1400  
156891   15   1000  
156891   15   1400  

WAList Table 
------------------ 
Definition: 
    WAL_STARTTIME DATE 
    WAL_KEY   VARCHAR2(50) 

Data: 
WAL_STARTTIME   WAL_KEY     
11/1/2016 10:00:00 AM 6341371019318098180 
11/1/2016 2:00:00 PM 7561779448126279684 
11/8/2016 10:00:00 AM 6904435321948802820 
11/8/2016 2:00:00 PM 7998296559469684996 
11/15/2016 10:00:00 AM 4690144247933554180 
11/15/2016 2:00:00 PM 7931460546152111876 

我需要的是某種方式來匹配來自議程表的WAList表的記錄。 我怎樣才能寫出我的where子句,以將WALList記錄與Agenda.AGD_DAY記錄進行匹配,並在正確的一天返回正確的密鑰?這將是結果:

EVE_START_DATE AGD_DAY AGD_START_TIME WAL_KEY     
11/1/2016  1   1000   6341371019318098180 
11/1/2016  1   1400   7561779448126279684 
11/1/2016  8   1000   6904435321948802820 
11/1/2016  8   1400   7998296559469684996 
11/1/2016  15   1000   4690144247933554180 
11/1/2016  15   1400   7931460546152111876 
+0

如果它只是* *根據時間,我可以看到你預期的輸出日期總是'11/1/2016'? – GurV

+0

但看看WAL表中的StartTime。它具有Sessions.StartDate + SessionDay + StartTime(12小時格式) – MB34

+1

什麼是您的數據類型?第一個表中是「StartDate」,第二個是「日期」數據類型中的「StartTime」?如果是這樣,StartDate的時間部分總是午夜?如果是這樣,爲什麼你會在第一個表中有一個'date'和一個單獨的'StartTime'列,它是一個'varchar2'(我猜),而不是隻是在'StartDate'中正確存儲時間? –

回答

1

假設數據類型爲— Sessions.startdate爲VARCHAR2和WAL.startTime爲日期:

select s.startdate, s.sessionDay, s.startTime, w.key 
from sessions s join WAL w 
on to_date(to_char(to_date(s.startdate, 'mm/dd/yyyy') + s.sessionDay, 'mm/dd/yyyy') 
||s.starttime,'mm/dd/yyyyhh24mi') = w.startTime; 
+0

這非常接近我所需要的。 – MB34

+0

但是這段代碼返回一個**一個非數字的字符被發現的地方數字是預期** ....'to_date((e.eve_start_date + a.agd_day)||''|| substr(a.agd_start_time, 1,2)||':'|| substr(a.agd_start_time,3,2),'mm/dd/yyyy hh24mi'),' – MB34

+0

儘管這個解決方案對我來說有問題,但卻導致瞭解決方案。 – MB34