首页 > 解决方案 > 如何根据字段值添加一定天数

问题描述

我正在创建一个视图来转换我们为日期/时间输入的一些值。(我已经算出时间了。)在这个表中,日期的格式是“1840 年 12 月 31 日之后的天数”。我正在尝试创建一个显示实际日期/时间而不是这种格式的视图。这是我到目前为止所拥有的:

CASE WHEN UPPER(FLWSHT_MEAS_NM) LIKE '%DATE' THEN TO_CHAR(DATE '1840-12-31' + INTERVAL ACUTE_MEASURE_VALUE DAY)

我知道这是添加日期的正确语法,因为我可以让视图使用它来代替:

CASE WHEN UPPER(FLWSHT_MEAS_NM) LIKE '%DATE' THEN TO_CHAR(DATE '1840-12-31' + INTERVAL '30' DAY)

我的问题是,如何根据 ACUTE_MEASURE_VALUE 字段添加特定天数?我无法运行代码来获取运行时错误,因为它作为语法错误出现。

标签: sqlteradata

解决方案


来自 Teradata 文档:

Teradata SQL 扩展了 ANSI SQL:2011 标准,以允许从 ANSI DATE 值中添加或减去天数的操作。Teradata SQL 将该数字视为 INTERVAL DAY 值。

我假设您的字段 ACUTE_MEASURE_VALUE 已经在您的表中并且是一个整数。INTERVAL 和 DAY 这两个词是区间常量规范的一部分- 这是一个变量,从语法上讲,您不使用这些关键字。

...TO_CHAR(DATE '1840-12-31' + ACUTE_MEASURE_VALUE)...

只需删除 INTERVAL 关键字和 DAY 关键字,它应该可以工作。

顺便说一句,你为什么在这个中使用 To_Char() ?通过将其转换为字符串,它可以抢占使用此视图的任何人在此日期执行计算。如果您将视图保留为 DATE 格式,则从此视图中的任何后续选择在操作此数据字段时都具有更大的灵活性。


推荐阅读