【问题标题】:Declare Parameters in Teradata query OR If-then-else在 Teradata 查询或 If-then-else 中声明参数
【发布时间】:2023-03-25 21:37:02
【问题描述】:

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

如果 Current_date 小于一个月的 15 号,那么 ?Startdate 参数 = 上个月的 1 号并且 ?EndDate 参数 = 本月的最后一天

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

如果 Current_date >= 15 则为 ELSE,则 Startdate 参数 = 当前月的 1 日,EndDate 参数 = 当前月的最后一个日期

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

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

#1) 如何将它们放入参数中。如果我可以将它们放在参数中,那么我所要做的就是

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

#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 中创建函数或存储过程

【问题讨论】:

  • 您的专栏真的命名为“日期”吗?如果是这样,你必须把它放在双引号中。不确定它是否会这样工作,或者与实际日期进行比较。
  • 不,它没有命名为“日期”,但它是一个日期字段

标签: if-statement parameters teradata


【解决方案1】:

#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,不能与数据类型混淆。

【讨论】:

  • 如果我们在谈论性​​能,将上述选择放入一个易失性表并将其加入您的视图可能会有所帮助。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2020-08-10
    相关资源
    最近更新 更多