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). P>
3 Réponses :
une manière Oracle: Comment ça marche: p>
2h: 30min code> dans une date et génère une date de 01-jan-19 code> (toutes dater l'analyse sans jour, mois, année devient le premier de le mois actuel / année) li>
0:00 code> à une date -> même jour, même mois, même année que ci-dessus, mais une heure de minuit li>
Et si la durée est> 24h? ;)
Utilisez la solution de Gordon .. ou stockez les données correctement en premier lieu! :)
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 () code> fournit un peu plus de flexibilité: p>
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
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 code> plutôt que comme une chaîne comme 2H: 30min code> 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 code> 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.
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.