繁体   English   中英

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

[英]Teradata SQL Same Day Prior Year in same Week

需要帮助弄清楚如何确定日期是否与teradata中的日期相同。 IE,今天12/1/15 Tuesday ,去年同一天实际上是12/2/2014 Tuesday

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

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

为了在Teradata中执行此操作,最好的办法是使用sys_calendar.calendar表。 特别是day_of_week列。 虽然还有其他方法可以做到这一点。

此外,不使用CURRENT_DATE - INTERVAL '1' YEAR ,使用ADD_MONTHS(CURRENT_DATE, -12)是个好主意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.得到1.将其添加到去年的日期,你将得到一周中的同一天作为当前日期。

我测试了这之间的所有日期01/01/2010CURRENT_DATE和它的工作如预期。

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

current_date - 364

下面的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日星期二。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM