需要帮助确定如何确定日期是否相同'日'就像今天在teradata。 IE,今天12/1/15 Tuesday
,去年同一天实际上是12/2/2014 Tuesday
。
我尝试使用current_date - INTERVAL'1'Year
,但它返回12/1/2014
。
答案 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/2010
和CURRENT_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