[英]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/2010
和CURRENT_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.