2014-10-06 74 views
1

我試圖在ORACLE或Netezza中使用和重疊函數,它需要兩個日期範圍並檢查它們是否相互重疊。 Soemthing like this: SELECT (TIMESTAMP '2011-01-28 00:00:00', TIMESTAMP '2011-02-01 23:59:59') OVERLAPS (TIMESTAMP '2011-02-01 00:00:00', TIMESTAMP '2011-02-01 23:59:59');Impala中的OVERLAPS功能

在Impala或SparkSQL中執行此操作的最佳方法是什麼?不幸的是OVERLAPS在Impala或SparSQL中不存在。 我唯一能想到的就是UDF,但是尋找解決方法。 在此先感謝!

回答

2

我認爲寫出邏輯明確比使用OVERLAPS更清晰。例如,是否包含終點?

的邏輯是:

select (case when TIMESTAMP '2011-01-28 00:00:00' < TIMESTAMP '2011-02-01 23:59:59' AND 
        TIMESTAMP '2011-02-01 00:00:00' < TIMESTAMP '2011-02-01 23:59:59' 
      then 1 else 0 
     end) as overlaps 

的邏輯是。如果您有兩個範圍,範圍1和範圍2,包括開始時間和結束時間,則當第一個開始在第二個結束之前開始並在第二個開始之後的第一個結束時它們重疊:

select (case when range1_start < range2_end and range1_end > range2_start 
      then 1 else 0 
     end) as overlaps