Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como formatar o tipo de intervalo para o formato HH:MM?


Acredito que manipular o valor da string seja a solução mais fácil e simples, por isso apresentarei uma solução alternativa.

Da documentação da Oracle para o INTERVAL DAY TO SECOND tipo de dados e da definição da coluna START_TIME na sua pergunta, os valores da coluna não podem abranger mais de um dia nem podem conter segundos fracionários.

Do Oracle Documentação JDBC , o tipo de dados INTERVAL DAY TO SECOND mapeia para a classe java oracle.sql.INTERVALDS . (Esta é uma das classes no arquivo JAR do driver Oracle JDBC.)

Do javadoc da classe oracle.sql.INTERVALDS :

Você sabe que apenas os bytes 4, 5 e 6 são relevantes devido à definição da coluna START_TIME , ou seja, zero dias e zero segundos fracionários. Mas como você escreveu em sua pergunta que está ignorando os segundos, isso significa que apenas os bytes 4 e 5 são relevantes. Daí o código para recuperar o valor do ResultSet e convertê-lo em uma string no formato desejado é:
INTERVALDS intervalDS = (INTERVALDS) rs.getObject("START_TIME");
byte[] bytes = intervalDS.toBytes();
int hour = bytes[4] - 60;
int minute = bytes[5] - 60;
String result = String.format("%02d:%02d", hour, minute);