1

我有一个我生成的表格,其中信息每天汇总到汇总我有第二个表格,可以将其视为日历表格,它允许我在加入表格时获取汇总的周数

表格中的日期都是整数,例如 20130501 (YYYYMMDD)

当我在下面创建 SQL(通用)时,它工作正常,但现在我想安排这个脚本每周运行一次以获取前一周并收到错误

脚本工作正常

    SELECT *
    FROM TABLE_1 as sample
    INNER JOIN TABLE_2 as calendar
    ON sample.day = calendar.day
    WHERE sample.day >= 20130501
    AND sample.day <= 20130507

脚本失败

    SELECT *
    FROM TABLE_1 as sample
    INNER JOIN TABLE_2 as calendar
    ON sample.day = calendar.day
    -- >= Previous Monday Last week
    WHERE sample.day >= CAST(CAST(((DATE-DAYOFWEEK(DATE)-5) (FORMAT 'YYYYMMDD')) AS CHAR(8)) AS INT)
   --  <= Previous Sunday Last week
    AND   sample.day <= CAST(CAST(((DATE-DAYOFWEEK(DATE)+ 1) (FORMAT 'YYYYMMDD')) AS CHAR(8)) AS INT) 

我在第二个脚本上收到的错误消息是

Teradata ODBC Teradata 驱动程序语法错误:预期介于 ')' 和 '-' 之间

谢谢大家的时间这几天一直困扰着我

4

1 回答 1

3

DAYOFWEEK 不是内置的 Teradata 函数。有一个 DAYOFWEEK ODBC 函数,但您必须在 ODBC 驱动程序中打开一个标志才能使用它。

根据您的版本,可能会有像 TD_DAY_OF_WEEK 这样的 UDF,或者您编写自己的 SQL-UDF。否则试试这个:

BETWEEN CAST(CURRENT_DATE - ((CURRENT_DATE - DATE '0001-01-07') MOD 7) - 6 AS INT) + 19000000
    AND CAST(CURRENT_DATE - ((CURRENT_DATE - DATE '0001-01-07') MOD 7)     AS INT) + 19000000
于 2013-10-10T11:16:24.363 回答