【问题标题】:How to deal with a date stored as a string in an int field in Teradata?如何处理在 Teradata 的 int 字段中存储为字符串的日期?
【发布时间】:2018-03-09 06:05:30
【问题描述】:

我在 Teradata 中有一个表,它将日期存储在 8 个字符的 INT 字段中,格式如下“YYYYMMDD”,因此今天它将存储“20180308”。如果我尝试将其转换为这样的日期:

CAST(date_field AS DATE FORMAT 'YYYY-MM-DD')

它将日期转换为 3450 年之类的某个未来日期。

我认为此数据未存储为日期对象是错误的。有没有办法克服这个故障?很遗憾,我无权更改此设置。

谢谢

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    这不是一个 8 字符 整数,它是一个 8 digit 整数。

    Teradata 使用

    存储日期
    (year - 1900) * 10000
    + (month * 100)
    + day
    

    这导致今天的118030820180308 将返回3918-03-08

    要将其转换为您需要使用的日期

    cast(intdate-19000000 as date)
    

    【讨论】:

      【解决方案2】:

      select cast('20180308' as date format 'yyyymmdd') ;

      【讨论】:

      • 是的,所以这给了我一个日期在 3980 年之类的东西。
      • select cast((cast(20180308 as char(8))) as date format 'yyyymmdd') ;
      猜你喜欢
      • 2016-04-09
      • 2021-05-01
      • 2014-11-04
      • 2012-07-20
      • 2019-10-02
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多