我的ID字段包含值201503061500389804
。时间戳在此ID中给出。 ID值的格式如下:yyyyMMddhhmmss。
例如,201503061500389804 = 2015-03-06 15:00:38。最后4位数字不需要。我想从ID中提取日期和时间,并将其保存在新列中,例如EVENT_DATE。但没有找到任何办法。
答案 0 :(得分:2)
如果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));
然后您不必担心将值设置为插入的一部分或通过触发器,它将自动存在。
答案 1 :(得分:1)
使用to_date()
。我认为这是格式字符串:
select to_date(substr(id, 1, 14), 'YYYYMMDDHH24MISS')