2015-12-28 33 views
0

我有一個待命列表,其中有兩個人在當天通話。第一個人是美國站,另一個人是亞洲站,以補償時差。美國東部時間上午6點至下午5點59分和亞洲人的隨叫隨到,從美國東部時間下午6點至5點59分隨叫隨到。現在我在表格中有一個名爲「位置」(無論是亞洲還是美國)的列,另一列是日期,另一列是名稱。現在我怎樣才能用給定參數的正確人員做出選擇陳述。如何在一天中的兩個不同時間之間進行選擇

PS通常我可以自己做這件事,但我有腦震盪,所以我感覺有點偏激。

+0

@Marshal:沒有GETUTCDATE()在甲骨文 –

+0

「美國」或「亞洲」是不夠的,以獲得正確的時區。每個大陸都有幾個時區。您應該將日期和時間存儲在定義爲'timestamp with time zone'的列中。然後,您可以在不同時區之間轉換回來和第四次並比較這些值。 –

回答

-1

我想通了:

DECLARE 
    V_TIME date; 
BEGIN 
    select extract(hour from CAST(sysdate AS TIMESTAMP)) into V_TIME from dual; 
    if V_TIME >= '6' and V_TIME < '18' 
    then 
     --insert America query here 
    else 
     --insert Asia query here 
    END IF; 
END; 
+0

這是一個可怕的方式來做到這一點。相反,將StartTime和EndTimes轉換爲當前日期,並將EndTime小於其StartTime的計劃表中的任何行分成兩行:一個從{time}(包含)到第二天中午12:00(獨佔)和從上午12點(含)至{EndTime}(含)的一個。比較計算出的時間是否在這些開始和結束時間之間會產生結果。噢,並且讓你的結束時間獨佔 - 在數據庫中設置日期範圍時,不得不混淆日期精度。 – ErikE

+0

胡克或克魯克永遠不會得到結果。採用正確的解決方案和策略。 – Marshal

+0

沒有開始時間和結束時間,這是一個表格,用於多個隨時調度,每個調度都有自己的約束,所以改變DDL並不是一個真正的選擇,它是一個更大的組合模式的一部分。我的工作是讓應用程序解決它。 – asdf

相關問題