gpt4 book ai didi

sql - Teradata 使用 SQL 代码获取周数

转载 作者:行者123 更新时间:2023-12-02 17:32:29 26 4
gpt4 key购买 nike

我希望从 teradata 中的日期获取周数我可以看到有使用系统日历表的解决方案,但我想使用代码来获取周数

例如第 28 周是 7 月 6 日到 12 日(含)

我找到了这个code当你把 DATE 而不是 cdate 时,它​​工作正常

SELECT 
((cdate - ((EXTRACT(YEAR FROM cdate) - 1900) * 10000 + 0101 (DATE))) - ((cdate - DATE '0001-01-07') MOD 7)  + 13) / 7

我的日期是 MM/DD/YY 格式,当我运行它时我收到错误消息

SELECT ((06/29/15 - ((EXTRACT(YEAR FROM 06/29/15) - 1900) * 10000 + 0101     (DATE))) - ((06/29/15 - DATE '0001-01-07') MOD 7)  + 13) / 7

“用户不能在 DATE 执行该操作”

任何帮助将不胜感激

最佳答案

日期格式仅用于转换为字符串(= 显示),但数据类型 DATE 没有格式,它是一个整数。

06/29/15 不是日期,它是基于整数 6/29/15 的计算结果为整数零。

日期始终以 ISO 格式指定:DATE '2015-06-29':

((DATE '2015-06-29' - ((EXTRACT(YEAR FROM DATE '2015-06-29') - 1900) * 10000 + 0101     (DATE))) - ((DATE '2015-06-29' - DATE '0001-01-07') MOD 7)  + 13) / 7

但是您的星期似乎是基于国际标准,并且此计算不会返回一年中最后几天的正确数字,例如2014-12-31 星期三将是第 53 周,而在 ISO 中它应该是第 1 周。如果需要 ISO 周,你最好使用

WEEKNUMBER_OF_YEAR (DATE '2015-06-29', 'ISO') -- integer
or
TO_CHAR(DATE '2015-06-29', 'iw') -- string

编辑:

这些功能是在 TD14 中添加的,然后您可以使用以下代码用于 ISO 周/年:

REPLACE FUNCTION iso_week(cdate DATE)
RETURNS INT
SPECIFIC iso_week_date
RETURNS NULL ON NULL INPUT
CONTAINS SQL
DETERMINISTIC
COLLATION INVOKER
INLINE TYPE 1
RETURN
(((cDate - ((cdate - DATE '0001-01-01') MOD 7) + 5)
- ((EXTRACT(YEAR FROM (cDate - ((cdate - DATE '0001-01-01') MOD 7) + 5)) - 1900) * 10000 + 0101 (DATE))) / 7) + 1 (FORMAT '99')
;

REPLACE FUNCTION iso_year(cdate DATE)
RETURNS INT
SPECIFIC iso_year_date
RETURNS NULL ON NULL INPUT
CONTAINS SQL
DETERMINISTIC
COLLATION INVOKER
INLINE TYPE 1
RETURN
EXTRACT (YEAR FROM (cDate - (((cdate - DATE '0001-01-01') MOD 7) + 1) + 4)) (FORMAT '9999')
;

如果不允许您创建 SQL UDF,您可以简单地剪切和粘贴计算。

关于sql - Teradata 使用 SQL 代码获取周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31287050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com