我已经搜索了SO和其他网站很长一段时间,所以如果这是我错过的重复,我会道歉。
鉴于示例字符串Thu 09/22 15:17:46 PM - PHONE,它来自具有varchar2数据类型的表,我需要将15:17:46 PM转换为3:17 PM,以便得到字符串是星期四09/22 3:17 PM - 电话。
我用来检索数据的查询是(更大的查询的一部分):
( SELECT TO_CHAR (TO_DATE ( notetext, 'dd/mm/yyyy hh24:mi:ss'), 'Dy MM/DD') || ' ' || TO_CHAR ( TO_DATE (notetext, 'dd/mm/yyyy hh24:mi:ss'), 'hh24:mi:ss AM') || ' - ' || notetype
FROM
a pnx
WHERE
pnx.notetype IN ('FAX', 'PHONE')
AND pnx.episode = ep.episodenbr
) END) AS RFIINDICATOR
其中notetext是具有数据的部分Thu 09/22 15:17:46 PM并且notetype具有数据PHONE。两者都是varchar2数据类型。
我试图调用提取函数来拉出时间部分,做一个
to_char (RFIINDICATOR, 'HH12:MI:SS PM')
所有产生无效数字错误或其他一些Oracle错误。
有什么建议吗?提前谢谢。
答案 0 :(得分:0)
也许这样的事情(只有很多方法可以使这只猫皮肤化):
with
inputs ( str ) as (
select 'Thu 09/22 15:17:46 PM - PHONE' from dual union all
select 'Thu 09/22 9:17:46 AM - PHONE' from dual
),
fragments ( str, dt, other ) as (
select str, substr(str, 1, instr(str, ' ', 1, 3) - 1),
substr(str, instr(str, ' ', 1, 4))
from inputs
)
select str, to_char(to_date(dt, 'Dy mm/dd hh24:mi:ss'), 'Dy mm/dd hh:mi:ssAM') ||
other as new_str
from fragments
;
STR NEW_STR
----------------------------- ------------------------------
Thu 09/22 15:17:46 PM - PHONE Thu 09/22 03:17:46PM - PHONE
Thu 09/22 9:17:46 AM - PHONE Thu 09/22 09:17:46AM - PHONE