使用TD_WEEK_OF_CALENDAR时出现Teradata 3706错误

时间:2018-08-21 14:03:36

标签: sql teradata

我查询了我的日常查询,并尝试使用TD_WEEK_OF_CALENDAR函数将其转换为每周一次,这似乎使所有事情停止了工作,我不太理解。这是一个基本示例,请注意,我已更改了查询,因此它看起来像是在运行一个奇怪的查询,但它显示了发生错误的位置很容易。

我得到的错误是:“查询失败。3706:语法错误:预期在','和'year'关键字之间。但是,子查询运行得很好,如果我删除了该联接,查询运行也很好,所以我有些困惑。

select a.Customer
    , TD_WEEK_OF_CALENDAR(ab.DateField) as Week
    , z.AvgYearBalance
    , avg(ab.Balance) as WeeklyBalance
from Customer a
left join Balances ab on a.Customer=ab.Customer

left join(
     select a.Customer
         , year(ab.DateField) as Year
         , avg(ab.Balance) as AvgYearBalance
     from Customer a
     left join Balances ab on a.Customer=ab.Customer
     group by 1,2
) z on a.Customer=z.Customer

group by 1,2,3

1 个答案:

答案 0 :(得分:1)

year不是Teradata中的内置函数。只有较早的ODBC驱动程序才具有将其自动转换为有效语法的开关,但是从TD14开始不推荐使用,在TD16中已将其删除。它仅适用于普通选择,不适用于视图等,显然派生表也不支持该功能。只需切换到有效的Teradata和Stanadard SQL:

extract(year from ab.DateField) as "Year"

Btw,TD16.20的最新“功能升级1”重新引入了诸如UCASE,CONCAT,YEAR之类的功能,而与连接方式无关:-)