Bonjour,
Existe-t-il un format tel que integer, float, date, etc. qui s'applique au temps en sql ? Par exemple comment enregistrer une durée de deux heures 30 ?
Merci pour votre aide.
Version imprimable
Bonjour,
Existe-t-il un format tel que integer, float, date, etc. qui s'applique au temps en sql ? Par exemple comment enregistrer une durée de deux heures 30 ?
Merci pour votre aide.
Hello !
Il n'existe pas de type spécial pour les durées.
Vous pouvez mettre 2 champs date : date de début et date de fin
Ou un champ integer qui stock le nombre de seconde de la durée
Le mieux est d'utiliser un FLOAT et de travailler en heure décimale.
Vous devez ensuite ajouter des UDF pour faire la conversion heure décimale vers chaines horaire ([H*]HH:MM:SS.nnn)
A +
Bonjour
Et le format "Interval" de PostgreSQL ?
par exemple :
ouCode:SELECT NOW() + '2 hours'::interval;
Code:SELECT NOW() - '2016-01-01 00:00:00'::TIMESTAMP
Effectivement il existe le type interval, en revanche c'est 16 octects alors que quelques octect devrait suffir. Il faudra choisir en fonction des besoins
Le type INTERVAL nécessite des constructions très complexes et littérales pour être manipulé notamment dans les calculs de durées.... Car c'est un intervalle, pas une durée !!!! Nuance subtile, car l'intervalle nécessite une date exacte alors que la durée est relative....
En sus les calculs sur le type intervalle sont généralement peu performant, alors que l'addition ou la soustraction de nombres est la chose la plus rapide qui soit....
Un petit exemple, calcul de la durée moyenne lorsque l'on a que des données sous la forme de type INTERVAL... Vous verrez la différence !
C'est d'ailleurs pour cela que certains SGBDR n'ont jamais implémenté le type INTERVAL et que la dernière norme SQL:2011 utilise le type TIMESTAMP avec deux colonnes début et fin et non le type INTERVAL pour gérer les temporal tables !!!!!
A +
@SQLPRO : ok pour la partie performances mais la subtilité "Intervalle" vs "Durée" m'échappe ...
Je ne comprends pas...Citation:
Car c'est un intervalle, pas une durée !!!! Nuance subtile, car l'intervalle nécessite une date exacte alors que la durée est relative....
Un INTERVAL de la forme '2 hours' ne nécessite aucune date exacte non ?
Posez vous la question pour un intervalle comme '2 month'....
C'est pourquoi on travaille en secondes, minutes, heures, jours, semaines décimales, mais jamais en MOIS, TRIMESTRE, SEMESTRE, ANNEE....
La norme SQL ayant prévu ces types d'intervalles, avant de s'apercevoir que ces derniers ont des durées variables en fonction de la date de départ !
D’ailleurs la norme SQL s'est même tirée une balle dans le pied en disant que les calculs avec une granularité intermédiaire de mois sont interdits... Interdit que brave d'ailleurs PG et qui donc donne des résultats incohérents....
A +