SELECT to_char(to_timestamp(coalesce(
case position('.' in a.gen_time_of_admission)
when 0
then
to_char(to_timestamp(a.gen_time_of_admission,'hh24:mi'), 'HH12:MI PM' )
else
to_char(to_timestamp(trunc(to_number(a.gen_time_of_admission, '99D99999999')*24 , 0)||':'||
cast(trunc( ( (to_number(a.gen_time_of_admission, '99D99999999')*24) -
trunc(to_number(a.gen_time_of_admission, '99D99999999')*24 , 0)) * 60)
as text),
'HH24:MI'),'HH12:MI PM' )
end,substr(a.api_admission_date,length(a.api_admission_date)-8,9)
),'HH12:MI PM'),'HH24:MI') from <table_a>;
由于多种功能和具有 600 万条记录的表,此查询需要花费大量时间。
有没有办法在不使用多种功能的情况下获得相同的结果?
0.720833333 是 varchar 数据类型表中的值,我们想要 HH:MM 格式的格式。 (例如:0.720833333 转换为 17:18)。
只需将所有
to_number(a.gen_time_of_admission, '99D99999999')
替换为 a.gen_time_of_admission::numeric
应该会加速数倍,而且我认为它会产生相同的答案,至少对于您给出的单个(不完整)示例来说是这样。但如果输入格式错误,当其他表单抛出错误时,它可能会提供答案。
可能有更好的方法来完成这个怪物正在做的事情。