-3
votes

Extraire une heure équivalente d'une durée de temps

J'ai le format de champ de date suivant: "HH: mm", qui représente la durée d'un événement et j'aimerais extraire la valeur équivalente en heure (Exemple: 2H: 30min ==> Résultat: 2, 5 heures).


3 commentaires

Gardez les heures de même que et divisez simplement les minutes de 60. N'est-ce pas ce que vous voulez?


Au format du champ est un varchar, donc je ne peux donc pas diviser directement les minutes de 60!


Vous devez dire aux gens que vous utilisez une application analytique et non du code SQL! Les analyses OBI ne fonctionnent pas en écrivant du code SQL.


3 Réponses :


0
votes

une manière Oracle: xxx

Comment ça marche:

  • analyse 2h: 30min dans une date et génère une date de 01-jan-19 (toutes dater l'analyse sans jour, mois, année devient le premier de le mois actuel / année)
  • analyse 0:00 à une date -> même jour, même mois, même année que ci-dessus, mais une heure de minuit
  • les soustrait, entraînant un numéro de point flottant qui représente les fractions d'un jour (une journée est de 1,0, 12 heures est de 0,5, etc.) entre les deux denttimes. Cela fonctionne dans ce cas comme environ 0.1041667
  • Nous multiplions par 24 pour transformer notre 0,1041667 jours en heures -> 2.5

2 commentaires

Et si la durée est> 24h? ;)


Utilisez la solution de Gordon .. ou stockez les données correctement en premier lieu! :)



0
votes

Si la valeur est stockée sous forme de chaîne, vous pouvez extraire les composants et utiliser arithmétique.

Une méthode pour extraire les composants serait de prendre les deux premiers caractères, puis les 4ème et 5ème. regexp_substr () fournit un peu plus de flexibilité: xxx


0 commentaires

1
votes

Idéalement, changez votre table pour stocker les données sous forme d'intervalle à la deuxième code> Type de données, puis vous pouvez simplement stocker intervalle '2:30' heure à minute code> et Utilisez la date d'arithmétique pour obtenir votre réponse.

VALUE         |                          HOURS_DIFFERENCE
:------------ | ----------------------------------------:
2h:30min      |                                       2.5
15min         | .2500000000000000000000000000000000000008
3h            |                                         3
26 h : 20 min | 26.33333333333333333333333333333333333328
-2h:30min     |                                      -2.5
-4h           |                                        -4
-45min        |                                      -.75
0h:0min       |                                         0
0h            |                                         0
-0min         |                                         0


2 commentaires

Il est dommage que l'utilisation d'intervalles soit si longue et clunky


@Caiusjard Idéalement, l'OP doit stocker les données comme intervalle <2:30 'heure à minute plutôt que comme une chaîne comme 2H: 30min et vous pouvez sauter la chaîne conversions et juste utiliser la date d'arithmétique. Malheureusement, ils n'utilisent pas le bon type de données pour le travail, de sorte que l'analyse des chaînes est nécessaire. Si l'OP n'allait jamais avoir des dates négatives, ils peuvent éteindre cette partie; De même, s'il y a toujours une heure et une minute composante, alors la fonction coalesce peut être supprimée ... Il y a beaucoup de redondance dans ma réponse pour faire face à un manque de spécification dans la question.