Vous n'êtes pas identifié(e).

#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

Pied de page des forums