对于Oracle来说,这是一个非常新的概念,所以完全不知道如何做到这一点。我把时间存储为如下的数字(hhmmssss):| 工艺时间|| --------------|| 10150450|| 2034039|我想把它们显示如下:| 工艺时间|| --------------|| 十点十五分零四百五十秒|| 2:03:4039|当AM时间没有前导0时。最好的办法是什么?一个简单的TO_CHAR能在数字长度不同的地方工作吗?
t2a7ltrp1#
with data (process_time) as ( select '10150450' from dual union all select '2034039' from dual ) select regexp_replace(process_time, '(^\d{1,2})(\d{2})(\d{4}$)', '\1:\2:\3' ) from data ; 10:15:0450 2:03:4039
py49o6xq2#
您可以使用TO_TIMESTAMP将其转换为时间戳,然后使用TO_CHAR对其进行格式化:
TO_TIMESTAMP
TO_CHAR
SELECT process_time, TO_CHAR( TO_TIMESTAMP( LPAD(process_time, 8, '0'), 'HH24MISSFF2' ), 'HH24:MI:SS.FF2' ) AS time FROM table_name;
其中,对于样本数据:
CREATE TABLE table_name (PROCESS_TIME) AS SELECT 10150450 FROM DUAL UNION ALL SELECT 2034039 FROM DUAL
输出:| 工艺时间|时间|| --------------|--------------|| 10150450|10点15分04秒50|| 2034039|时间02:03:40.39|fiddle
2条答案
按热度按时间t2a7ltrp1#
py49o6xq2#
您可以使用
TO_TIMESTAMP
将其转换为时间戳,然后使用TO_CHAR
对其进行格式化:其中,对于样本数据:
输出:
| 工艺时间|时间|
| --------------|--------------|
| 10150450|10点15分04秒50|
| 2034039|时间02:03:40.39|
fiddle