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