postgresql查询优化、时间转换

问题描述 投票:0回答:1
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)。

postgresql function date query-optimization
1个回答
0
投票

只需将所有

to_number(a.gen_time_of_admission, '99D99999999')
替换为
a.gen_time_of_admission::numeric
应该会加速数倍,而且我认为它会产生相同的答案,至少对于您给出的单个(不完整)示例来说是这样。但如果输入格式错误,当其他表单抛出错误时,它可能会提供答案。

可能有更好的方法来完成这个怪物正在做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.