【问题标题】:How to add a certain number of days based on field value如何根据字段值添加一定天数
【发布时间】:2021-08-01 09:02:48
【问题描述】:

我正在创建一个视图来转换我们为日期/时间输入的一些值。 (我已经算出时间了。)在这个表中,日期的格式是“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 字段添加特定天数?我无法运行代码来获取运行时错误,因为它作为语法错误出现。

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    来自 Teradata 文档:

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

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

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

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

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

    【讨论】:

    • 完美!我只需要将 ACUTE_MEASURE_VALUE 也转换为整数,但这很有效。至于 TO_CHAR,我在一家医疗中心工作,我们所有患者的流程图值都存储在此表中。有数千种不同类型的度量,由 FLWSHT_MEAS_NM 或 FLWSHT_ID 字段区分。我需要将所有值保留为 VARCHAR,因为该字段中不仅存储日期或整数,还可能存在气道类型、Y/N 问题等。如果我们需要进行计算,我们通常只选择那些特定的 FLWSHT_ID 并将它们转换为日期/整数。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2022-07-06
    • 2023-03-18
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多