If statement 在Teradata查询或If-then-else中声明参数

If statement 在Teradata查询或If-then-else中声明参数,if-statement,parameters,teradata,If Statement,Parameters,Teradata,我是Teradata的新手。情况如下: 如果当前日期小于本月的15日,则?开始日期参数=上个月的第1日?结束日期参数=本月的最后日期 否则,如果当前日期>=15,则Startdate参数=当前月份的第一个,EndDate参数=当前月份的最后一个日期 我能够计算出每种情况下的日期,但无法计算出: 1如何将它们放入参数中。如果我能把它们放进params,那么我所要做的就是 或 2写一个IF-THEN-ELSE 请指导如何实现1或2。我无法以日历为例在teradata中创建函数或存储过程 SELECT

我是Teradata的新手。情况如下:

如果当前日期小于本月的15日,则?开始日期参数=上个月的第1日?结束日期参数=本月的最后日期

否则,如果当前日期>=15,则Startdate参数=当前月份的第一个,EndDate参数=当前月份的最后一个日期

我能够计算出每种情况下的日期,但无法计算出:

1如何将它们放入参数中。如果我能把它们放进params,那么我所要做的就是

或 2写一个IF-THEN-ELSE


请指导如何实现1或2。我无法以日历为例在teradata中创建函数或存储过程

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
    ;

我更喜欢当前的日期,不能与数据类型混淆。

如果我们谈论的是性能,那么将上面的选择放入一个可变表并将其连接到视图中可能会有好处。您的列真的命名为“日期”吗?如果是这样,你必须用双引号引起来。不确定它是否会以这种方式工作,或者与实际日期进行比较。不,它没有命名为“日期”,但它是一个日期字段
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
SELECT ... FROM ViewA
WHERE date BETWEEN ?Startdate AND ?EndDate 
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
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
    ;
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