【问题标题】:Extract date and time from ID从 ID 中提取日期和时间
【发布时间】:2015-03-06 14:15:52
【问题描述】:

我有包含值201503061500389804 的 ID 字段。时间戳在此 ID 中给出。 ID 值的格式如下:yyyyMMddhhmmss。 例如 201503061500389804 = 2015-03-06 15:00:38。不需要最后 4 位数字。我想从 ID 中提取日期和时间并将其保存在新列中,例如 EVENT_DATE。但是没有找到任何方法。

【问题讨论】:

    标签: sql oracle date time


    【解决方案1】:

    如果 ID 表示时间戳,您可以将最后四位数字包含为小数秒 - 如果这是它们所表示的 - 使用 to_timestamp() 而不是 to_date()

    select to_timestamp('201503061500389804',
      'YYYYMMDDHH24MISSFF4') as event_timestamp
    from dual;
    
    EVENT_TIMESTAMP           
    --------------------------
    2015-03-06 15:00:38.980400 
    

    如果您不想保留小数秒,也可以将其转换为日期:

    select cast(to_timestamp('201503061500389804',
      'YYYYMMDDHH24MISSFF4') as date) as event_date
    from dual;
    
    EVENT_DATE         
    -------------------
    2015-03-06 15:00:38 
    

    或者去掉最后四位数字并使用to_date()

    select to_date(substr('201503061500389804', 1, 14),
      'YYYYMMDDHH24MISS') as event_date
    from dual;
    
    EVENT_DATE         
    -------------------
    2015-03-06 15:00:38 
    

    您说要将其保存在新列中;如果您使用的是 11g 或更高版本,则可以使用虚拟列来执行此操作:

    alter table your_table add event_date date generated always as
      (to_date(substr(to_char(id), 1, 14), 'YYYYMMDDHH24MISS'));
    

    alter table your_table add event_date date generated always as
      (cast(to_timestamp(to_char(id), 'YYYYMMDDHH24MISSFF4') as date));
    

    那么您不必担心将值设置为插入的一部分或通过触发器设置,它会自动出现。

    【讨论】:

      【解决方案2】:

      使用to_date()。我认为这是格式字符串:

      select to_date(substr(id, 1, 14), 'YYYYMMDDHH24MISS')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        • 2020-12-19
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多