Vous n'êtes pas identifié(e).
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
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
Merci pour cette information
mais je voudrais exprimer les dates sous forme d'entier long
est-ce possible ?
merci bien
jean-Marie
Hors ligne
En millisecondes par rapport à quoi ?
Marc.
Hors ligne
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
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
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
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
merci bien pour vos explications
Hors ligne