Teradata SQL 前一年同一周同一天
Teradata SQL Same Day Prior Year in same Week
需要帮助弄清楚如何确定日期是否与 teradata 中的今天 'day' 相同。 IE,今天 12/1/15 Tuesday
,去年的同一天实际上是 12/2/2014 Tuesday
。
我尝试使用 current_date - INTERVAL'1'Year
但它 returns 12/1/2014
.
下面的 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
。您也许可以做一些创造性的算术来计算出去年的 12/1/2015 星期二是 12/2/2014 星期二。
如果您可以将当前日期的“星期几”转换为数字,并将前一年的“星期几”转换为数字,则可以通过一些数学运算来完成此操作。
要在 Teradata 中执行此操作,最好的办法是利用 sys_calendar.calendar
table。特别是 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
之间的所有日期测试了这个并且它按预期工作。
你为什么不简单地减去 52 周?
current_date - 364
需要帮助弄清楚如何确定日期是否与 teradata 中的今天 'day' 相同。 IE,今天 12/1/15 Tuesday
,去年的同一天实际上是 12/2/2014 Tuesday
。
我尝试使用 current_date - INTERVAL'1'Year
但它 returns 12/1/2014
.
下面的 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
。您也许可以做一些创造性的算术来计算出去年的 12/1/2015 星期二是 12/2/2014 星期二。
如果您可以将当前日期的“星期几”转换为数字,并将前一年的“星期几”转换为数字,则可以通过一些数学运算来完成此操作。
要在 Teradata 中执行此操作,最好的办法是利用 sys_calendar.calendar
table。特别是 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
之间的所有日期测试了这个并且它按预期工作。
你为什么不简单地减去 52 周?
current_date - 364