2014-01-13 46 views
0

我從其他三個表的連接中創建一個表並將它分區到日期字段。但是,此日期字段將被截斷爲每個條目的12:00:00小時。我究竟做錯了什麼?日期字段被截斷到12:00:00小時加入Oracle

select /*+ USE_HASH(A, B, C)*/ 
     id, status, region, dated 
from 
(
    select dated, id, region 
    from A inner join B 
    on  A.id = B.id 
    and trunc(B.dated) = trunc(to_date('2012/12/12', 'YYYY/MM/DD')) 
) AB 
inner join C 
on AB.id = C.id 
and AB.region = C.region 

當我看到這個表中的過時領域似乎已被截斷至12:00:00小時的輸出,而從表B中的過時的領域具有正確的時間,直到秒。


表定義:

Table A - (id number not null, region number not null) 
Table B - (id number not null, dated date not null) 
Table C - (id number not null, region number not null, status varchar not null) 

希望這有助於

+0

你需要發佈你的表格定義.. – StevieG

+0

你永遠不會失去從你選擇的日期的時間戳細節..你如何驗證輸出?你看到它在sqlplus或任何oci客戶端? (php,jdbc,odbc..adodb.etc) –

回答

0

你是不是在此查詢選擇A.dated任何地方。該dated列你選擇是從你的子查詢(AB),它來源於表`B中的一個

試試這個:

select /*+ USE_HASH(A, B, C)*/ 
    id, status, region, dateda, datedb 
from 
(
    select A.dated dateda, B.dated datedb, id, region 
    from A inner join B 
    on  A.id = B.id 
    and trunc(B.dated) = trunc(Sysdate) 
) AB 
inner join C 
on AB.id = C.id 
and AB.region = C.region 

,你應該看到發生了什麼

+0

表A沒有日期字段。只有表B有它。 – yudistrange

+0

在這種情況下,你的SQL沒有什麼問題。你確定它被截斷了嗎?你確定它不是正確的輸出,即與你的選擇標準相匹配的行絕對不是全部都有12:00:00的時間嗎? – StevieG

0

你只選擇「沒有任何表格定義的「ID」和「區域」:

select /*+ USE_HASH(A, B, C)*/ 
     id, status, region, dated 
from 
(
    select dated, id, region 
    from A inner join B 

因爲你加入它,它實際上並不重要。但是,您應該收到錯誤ORA-00918: column ambiguously defined。在某些Oracle版本中,有一個錯誤在使用ANSI連接時不會引發錯誤。

您是否發佈了整個查詢?