Teradata SQL在同一周的同一天同一天

时间:2015-12-01 21:33:42

标签: sql teradata

需要帮助确定如何确定日期是否相同'日'就像今天在teradata。 IE,今天12/1/15 Tuesday,去年同一天实际上是12/2/2014 Tuesday

我尝试使用current_date - INTERVAL'1'Year,但它返回12/1/2014

3 个答案:

答案 0 :(得分:2)

如果您可以将当前日期的“星期几”转换为数字,将前一年的“星期几”转换为数字,则可以通过一些数学运算来完成此操作。

为了在Teradata中执行此操作,最好的办法是使用sys_calendar.calendar表。特别是day_of_week列。虽然有other ways可以做到。

此外,使用CURRENT_DATE - INTERVAL '1' YEAR时最好不要使用ADD_MONTHS(CURRENT_DATE, -12),因为INTERVAL算术会在2012-02-29和其他2月29日的闰年日期失败。

所以,把它放在一起就可以得到你需要的东西:

SELECT  
    ADD_MONTHS(CURRENT_DATE, -12)
        +
        (
            (SELECT day_of_week FROM sys_calendar.calendar WHERE calendar_date = CURRENT_DATE)
            -
            (SELECT day_of_week FROM sys_calendar.calendar WHERE calendar_date = ADD_MONTHS(CURRENT_DATE, -12))
        )

这基本上是这样说的:取当前日期的星期几(3)并从中减去它的最后一年的星期数(2)得到1.将它添加到去年的日期,你将在同一天作为当前日期的一周。

我对01/01/2010CURRENT_DATE之间的所有日期进行了测试,并按预期工作。

答案 1 :(得分:0)

下面的SQL将为您提供星期几的缩写名称,它很麻烦,但它适用于Teradata版本。

SELECT CAST(CAST(ADD_MONTHS(CURRENT_DATE, -12) AS DATE FORMAT 'E3') AS CHAR(3)) AS LY_DayOfWeek
     , CAST(CAST(CURRENT_DATE) AS DATE FORMAT 'E3') AS CHAR(3)) AS CY_DayOfWeek

日期在Teradata内部以(Year-1900) * 100000 + (MONTH * 100) + DAY的整数表示。您可以做一些创造性算术来弄清楚2015年12月12日星期二是去年12月2日星期二。

答案 2 :(得分:0)

为什么不简单地减去52周?

current_date - 364