如何在Teradata中获取上周最后一天(周日为周结束日)
Teradata SQL 获取上周最后一天(周日为周末)的实现方式
需求说明
需要在Teradata SQL中实现:以周日作为一周的最后一天,获取上周的最后一天,具体示例如下:
- 当前日期为2023-01-27(周五),返回2023-01-22(上周日)
- 当前日期为2023-01-02(周一),返回2023-01-01(上周日)
- 当前日期为2023-01-18(周三),返回2023-01-15(上周日)
在Hive中对应的实现语句为:
date_sub(current_date, cast(date_format(current_date, 'u') as int));
之前尝试的Teradata语句存在问题:SELECT ROUND(current_date, 'd') (FORMAT 'yyyy-mm-dd');会返回最近的周日,而非上周的最后一天,不符合需求。
正确的Teradata等效语句
利用Teradata的DAYOFWEEK_ISO函数(返回1=周一,7=周日,与Hive中date_format(..., 'u')逻辑完全一致),可以写出等效语句:
SELECT CURRENT_DATE - DAYOFWEEK_ISO(CURRENT_DATE) (FORMAT 'yyyy-mm-dd');
验证示例
- 当当前日期为2023-01-27(周五):
DAYOFWEEK_ISO返回5,2023-01-27 -5 = 2023-01-22,符合要求 - 当当前日期为2023-01-02(周一):
DAYOFWEEK_ISO返回1,2023-01-02 -1 = 2023-01-01,符合要求 - 当当前日期为2023-01-18(周三):
DAYOFWEEK_ISO返回3,2023-01-18 -3 = 2023-01-15,符合要求
内容的提问来源于stack exchange,提问作者userabc
相关产品推荐
相关产品推荐

