Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/02/2012, 16h33   #1
Membre éclairé
 
Inscription : avril 2009
Messages : 526
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2009
Messages : 526
Points : 305
Points : 305
Par défaut Comment arrondir un timestamp au quart d'heure ?

bonjour,

je voudrais arrondi (ou tronquer) une heure au format timestamp au quart d'heure .
comment faire ?

il y a bien la super fonction date_trunc mais le quart d'heure ne fait pas parti des critères d'arrondissement hélas.

si quelqu'un a une idée...
Michael REMY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 22h16   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 509
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 509
Points : 2 041
Points : 2 041
Si t est le timestamp, je pense qu'une expression comme ça fait l'affaire:
Code :
date_trunc('hour',t) + trunc(extract(minutes FROM t)/15)*'15 minutes'::interval
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/02/2012, 23h41   #3
Membre éclairé
 
Inscription : avril 2009
Messages : 526
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2009
Messages : 526
Points : 305
Points : 305
merci de ta réponse, je la testerais demain mais elle me semble 'lourde' pour mettre dans un select et un group by (car je dois regrouper des horraires pour trouver des similitudes)
Michael REMY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 18h00   #4
Membre éclairé
 
Inscription : avril 2009
Messages : 526
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2009
Messages : 526
Points : 305
Points : 305
Citation:
Envoyé par estofilo Voir le message
Si t est le timestamp, je pense qu'une expression comme ça fait l'affaire:
Code :
date_trunc('hour',t) + trunc(extract(minutes FROM t)/15)*'15 minutes'::interval
bonjour,

je viens de tester, cela arrondi au quart d'heure inférieur et non pas au plus proche.
du coup 1h59 deviant 1h45 ! pas cool pour la facturation !
Michael REMY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2012, 15h27   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 688
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 688
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il suffit de changer la fonction trunc par round :
Code :
1
2
3
4
5
6
7
8
9
SELECT num, tms
     , date_trunc('hour', tms) + trunc(extract(minutes FROM tms)/15)*'15 minutes'::interval AS ts_arrondi_trc
     , date_trunc('hour', tms) + round(extract(minutes FROM tms)/15)*'15 minutes'::interval AS ts_arrondi_rnd
  FROM (SELECT 1 AS num, '2012-02-15 15:07:00'::timestamp AS tms union ALL
        SELECT 2       , '2012-02-15 15:08:00'::timestamp
       ) AS sr
 
1	'2012-02-15 15:07:00'	'2012-02-15 15:00:00'	'2012-02-15 15:00:00'
2	'2012-02-15 15:08:00'	'2012-02-15 15:00:00'	'2012-02-15 15:15:00'
Attention, ici le pas d'arrondi est à la minute, si vous voulez gérer à la seconde il faut modifier un peu le code.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 12h18   #6
Membre éclairé
 
Inscription : avril 2009
Messages : 526
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2009
Messages : 526
Points : 305
Points : 305
voiçi une solution qui arrondi aux 15minutes les plus proches

Code :
date_trunc('hour', madate) + INTERVAL '15 min' * ROUND(date_part('minute', madate) / 15.0)
Michael REMY est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h39.


 
 
 
 
Partenaires

Hébergement Web