sql >> Databasteknik >  >> RDS >> Oracle

Hur formaterar man intervalltyp till HH:MM-format?

Jag tror att manipulering av strängvärdet är den enklaste och enklaste lösningen, så jag kommer att presentera en alternativ lösning.

Från Oracle-dokumentationen för INTERVALL DAG TILL ANDRA datatyp och från definitionen av kolumn START_TIME i din fråga kan kolumnvärdena inte sträcka sig över mer än en dag och inte heller innehålla bråkdelar av sekunder.

Från Oracle JDBC-dokumentation , datatypen INTERVAL DAY TO SECOND mappar till java-klassen oracle.sql.INTERVALDS . (Detta är en av klasserna i JAR-filen för Oracle JDBC-drivrutinen.)

Från javadoc av klassen oracle.sql.INTERVALDS :

Du vet att endast byte 4, 5 och 6 är relevanta på grund av definitionen av kolumn START_TIME dvs noll dagar och noll bråkdelar av sekunder. Men eftersom du skrev i din fråga att du ignorerar sekunderna betyder det att bara byte 4 och 5 är relevanta. Därav koden för att hämta värdet från ResultSet och att konvertera den till en sträng i önskat format är:

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);


  1. hur väljer jag AVG för flera kolumner på en enda rad

  2. Fel vid användning av DBMS_CRYPTO-funktionen för att dekryptera CLOB-data

  3. Referera till en tabell i annat schema och utelämna schemanamn

  4. Kan SQL primärnyckel acceptera '0'?