2010-05-05 6 views
0

Je dois calculer combien de temps s'est écoulé entre 2 fois. Par exemple:Calcul du segment de temps PL/SQL

(14:00:00 - 13:15:00) * 24 = .75

je besoin de ceci pour plus tard convertir KW à KWh, mais ce n'est pas le point.

Je ne trouve pas comment faire cela en PL/SQL.

Mes champs de date/heure ressemblent à ceci dans le DB:

1/23/2010 21:00:00

Je vous saurais gré des suggestions.

Steve

+0

Quelle version d'Oracle utilisez-vous? La raison de demander est que la fonctionnalité intégrée a été ajoutée à 9i qui devrait être en mesure de rendre cela plus facile –

Répondre

1

Si vous utilisez 9i ci-dessus cela vous donne le résultat escompté?

select extract(hour from numtodsinterval(to_date('14:00:00','HH24:MI:SS') - to_date('13:15:00','HH24:MI:SS'),'DAY')) 
||':'|| extract(minute from numtodsinterval(to_date('14:00:00','HH24:MI:SS') - to_date('13:15:00','HH24:MI:SS'),'DAY')) diff 
from dual 
/

DIFF 
------------------ 

0:45 

Extrait est détaillée here

et numtodsinterval est détaillée here

+0

Merci beaucoup pour la solution rapide. Maintenant, je strugling avec mes propres données, je pense. J'obtiens cette erreur: "ORA-01858: un caractère non-numérique a été trouvé où un numérique était attendu" - Le champ de dateTime ressemble à ceci: 8/12/2009 14:29:59 - Je ne l'obtiens pas – Steve

+0

heureux que je pourrais aider - Au lieu de to_date ('14: 00: 00' , 'HH24: MI: SS') comment sur l'utilisation to_date ('8/12/2009 14:29:59', ' MM/JJ/AAAA HH24: MI: SS ') Je ne sais pas si j'ai le mois (MM) et le jour (DD) dans la bonne position mais vous devriez pouvoir les échanger –

+0

Merci encore, Je l'ai fait juste mais la chose étrange est si je hardcode la date/heure dans la fonction cela fonctionne, quand je l'obtiens de la table j'ai eu cette erreur. La date est copiée de la table, comment cela peut-il être ... de toute façon, vous m'aidez déjà beaucoup. Merci encore. – Steve