Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 15/03/2011 17:16:03
- Jean-Marie
- Membre
Comment exprimer dans une requête des dates en millisecondes
Bonjour
je fais actuellement des requêtes du type :
select date, x(coord), y(coord) from table where date between '2011-3-15 11:28:7' and '2011-3-15 11:23:7' ;
comment dois-je faire pour exprimer des dates en millisecondes comme par exemple :
select date, x(coord), y(coord) from table where date between '130020176123' and '1300201992425' ;
merci d'avance
Jean-Marie
Hors ligne
#2 15/03/2011 17:20:29
- Marc Cousin
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
select date, x(coord), y(coord) from table where date between '2011-3-15 11:28:07.000' and '2011-3-15 11:23:07.100' ;
Marc.
Hors ligne
#3 15/03/2011 17:43:47
- Jean-Marie
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
Merci pour cette information
mais je voudrais exprimer les dates sous forme d'entier long
est-ce possible ?
merci bien
jean-Marie
Hors ligne
#4 15/03/2011 17:46:31
- Marc Cousin
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
En millisecondes par rapport à quoi ?
Marc.
Hors ligne
#5 15/03/2011 18:02:44
- Jean-Marie
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
depuis le 1er janvier 1970
j'ai cette information pour la date de début et la date de fin ;
est-il alors possible de faire les requêtes avec des valeurs de ce type (donc entier long)
et non pas avec des chaines de caractères
Hors ligne
#6 15/03/2011 18:16:14
- Marc Cousin
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
Vous pouvez calculer la date en ajoutant votre chiffre multiplié par un intervalle de 1 milliseconde au premier janvier 1970.
Je pense que c'est une mauvaise idée (timezone, saut de date, etc…): votre algorithme risque d'échouer un jour ou l'autre.
Mais bon, vous pouvez faire comme cela:
SELECT '1970-01-01 00:00:00'::timestamp + '1 ms'::interval * 1000000000000;
?column?
---------------------
2001-09-09 01:46:40
Le problème de ce timestamp c'est qu'il est sans timezone (comme le vôtre apparemment).
Donc la question, c'est de quel 1er janvier 1970 on parle ? le local, ou l'UTC (c'est l'UTC qu'on utilise le plus souvent, au niveau des systèmes d'exploitation).
Marc.
Hors ligne
#7 15/03/2011 18:30:24
- Jean-Marie
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
effectivement il s'agit bien toujours de l'heure UTC et non de l'heure locale
par contre je pensais pouvoir faire une seule requête avec les dates de début et de fin avec ce format entier
dans la solution que vous proposez faut-il faire 3 requêtes ?
une pour la date de début
SELECT '1970-01-01 00:00:00'::timestamp_begindate + '1 ms'::interval * 1000000000000;
?column?
une pour la date de fin
SELECT '1970-01-01 00:00:00'::timestamp_enddate + '1 ms'::interval * 1000000000000;
?column?
et une 3ème pour sélectionner mes données comprises entre les dates de début et de fin
comment combinez vous ces 3 requêtes ?
merci d'avance
Hors ligne
#8 15/03/2011 19:01:15
- Marc Cousin
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
C'était juste un exemple de syntaxe, pour montrer les opérateurs entre dates et intervalles. Si vous réécrivez la requête originale, ça va être quelque chose du genre :
select date, x(coord), y(coord) from table where date between '1970-01-01 00:00:00+0'::timestamptz '1 ms'::interval * date_debut and 1970-01-01 00:00:00+0'::timestamptz '1 ms'::interval * date_fin
timestamptz c'est un timestamp avec timezone. Et le +0 pour lui préciser l'heure UTC.
Dernière modification par Marc Cousin (15/03/2011 19:01:47)
Marc.
Hors ligne
#9 15/03/2011 19:17:19
- Jean-Marie
- Membre
Re : Comment exprimer dans une requête des dates en millisecondes
merci bien pour vos explications
Hors ligne