2017-04-17 47 views
0

我是Teradata的新手。這裏的情況是:??在Teradata查詢中聲明參數或者If-then-else

如果CURRENT_DATE是一個月的< 15再上一個月份的開始日期參數= 1和結束日期PARAM =最後的當月日期

SELECT ... FROM ViewA 
WHERE date BETWEEN ?Startdate AND ?EndDate 

否則,如果CURRENT_DATE> =當月日期和結束日期PARAM當月=最後日期起計15則開始日期參數= 1

SELECT ... FROM ViewA 
WHERE date BETWEEN ?Startdate AND ?EndDate 

我能在電子計算日期但無法弄清楚:

#1)如何把它們放在參數中。如果我可以把它們放在PARAMS那麼我需要做的就是

SELECT ... FROM ViewA 
WHERE date BETWEEN ?Startdate AND ?EndDate 

OR #2)寫IF-THEN-ELSE

If Current_date is < 15 of month 

    SELECT ... FROM ViewA 
     WHERE Date BETWEEN 
     ADD_MONTHS((DATE - EXTRACT(DAY FROM DATE)+1), -1) AND ADD_MONTHS(LAST_DAY(DATE),0) 
    ELSE 
    SELECT ... FROM ViewA 
     WHERE date BETWEEN 
     ADD_MONTHS((DATE - EXTRACT(DAY FROM DATE)+1), 0) AND ADD_MONTHS(LAST_DAY(DATE),0)) 

END IF 

請指導如何實現#1或#2。我無法在teradata中創建函數或存儲過程

+0

您的專欄是否真的名爲'日期'?如果是這樣,你必須把它放在雙引號中。不知道它是否會這樣工作,或與實際日期比較。 – ULick

+0

不,它沒有命名爲'日期',但是它是日期字段 – SilverFish

回答

0

#2以日曆爲例。

SELECT calendar_date from Sys_Calendar.CALENDAR 
    WHERE calendar_date 
     BETWEEN 
     case when extract (day from current_date) < 15 
       then ADD_MONTHS((current_date - EXTRACT(DAY FROM current_date)+1), -1) 
       else    current_date - EXTRACT(DAY FROM current_date)+1 
     end 
     AND ADD_MONTHS(LAST_DAY(current_date),0) 
    order by calendar_date 
    ; 

我喜歡current_date,不能與數據類型相混淆。

+0

如果我們談論性能,將上面的選擇放入易失性表並將其加入到您的視圖中可能會有好處。 – ULick

+0

@ULICK,工作!謝謝 – SilverFish

0
WHERE date 
BETWEEN Trunc(current_date - 14 , 'mon') -- first day of the month 14 days before today 
    AND last_day(current_date)   -- last day of current month