我有一列时间戳以HH:MM:SS格式存储为varchars,我需要找出每个时间戳包含多少秒。
有没有办法可以使用正则表达式在每个冒号之前获取值并将它们存储为单独的数值?
基本上,我需要一个将16:38:14分成:
的表达式HH | MM | SS
16 | 38 | 14
感谢您提供任何帮助或建议。
答案 0 :(得分:1)
使用substr()
:
select substr(val, 1, 2) as hh, substr(val, 4, 2) as mm, substr(val, 7, 2) as ss
如果您希望这些作为数字,那么也可以使用to_number()
:
select to_number(substr(val, 1, 2)) as hh,
to_number(substr(val, 4, 2)) as mm,
to_number(substr(val, 7, 2)) as ss
答案 1 :(得分:0)
首先,将DATETIME
存储为VARCHAR2
数据类型是个不错的主意。您应始终使用DATE
或TIMESTAMP
。日期data type
具有日期和时间部分。改变设计并摆脱缺陷永远不会太晚。
使用DATE/TIMESTAMP
数据类型,您只需TO_CHAR
即可以所需格式显示日期。
SQL> alter session set nls_date_format='MM/DD/YYYY HH24:MI:SS';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
12/04/2014 10:38:56
SQL> select to_char(sysdate, 'hh24:mi:ss') as "time_portion" from dual;
time_por
--------
10:39:21
SQL>