如何在Teradata中的INTERVAL函数中使用子查询?

时间:2015-05-22 07:47:33

标签: teradata

我想在Teradata中使用Interval函数,如下所示:

SELECT DATE '1998-08-31' + INTERVAL '30' DAY;

但我想让日期范围可配置。那就是我希望它从表中读取而不是使用类似于' 30'的硬编码值。在上面的例子中。 我怎样才能做到这一点?将从中读取日期范围的表将存储整数范围。所以我想它也应该转换为VARCHAR。请澄清。 显然这不起作用

SELECT DATE '1998-08-31' + INTERVAL CAST((SELECT config.ask_gift_dt_diff 
FROM ddcoe_tbls.gift_lnk_config config
WHERE bzd_cnst_lnk_ctg_cd = 'ASK GIFT DATE RANGE') AS VARCHAR(20)) DAY

1 个答案:

答案 0 :(得分:2)

不,这不起作用,'30'不是字符串,它是interval的一部分。

您需要将CAST数字设为INTERVAL DAY,或将INTERVAL倍乘以该数字:

SELECT DATE '1998-08-31' 
 +  CAST((SELECT config.ask_gift_dt_diff 
          FROM ddcoe_tbls.gift_lnk_config config
          WHERE bzd_cnst_lnk_ctg_cd = 'ASK GIFT DATE RANGE') AS INTERVAL DAY)

SELECT DATE '1998-08-31' 
 + (SELECT config.ask_gift_dt_diff * INTERVAL '1' DAY
    FROM ddcoe_tbls.gift_lnk_config config
    WHERE bzd_cnst_lnk_ctg_cd = 'ASK GIFT DATE RANGE')