将时间戳字符串转换为Oracle中的数字

时间:2014-12-04 03:34:58

标签: regex oracle substring

我有一列时间戳以HH:MM:SS格式存储为varchars,我需要找出每个时间戳包含多少秒。

有没有办法可以使用正则表达式在每个冒号之前获取值并将它们存储为单独的数值?

基本上,我需要一个将16:38:14分成:

的表达式

HH | MM | SS

16 | 38 | 14

感谢您提供任何帮助或建议。

2 个答案:

答案 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数据类型是个不错的主意。您应始终使用DATETIMESTAMP。日期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>