Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 16/05/2008, 19h04   #1
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2002
Messages : 237
Points : 151
Points : 151
Par défaut Nombre de jours entre 2 dates

Bonjour,

Base 9i.

Je souhaiterai avoir le nombre de jour entre 2 dates.

Code :
SELECT date1 - date2 FROM dual
me renvoie un interval avec une syntaxe particulière
Citation:
+28 16:18:48.000000
Comme laurent schneider le dit très bien le to_char(interval) ne fonctionne pas !!

Comment doit-on faire pour récupérer uniquement le nombre de jours ? Extract() ? Trunc() ?

Merci à vous.
Boutss
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2008, 10h09   #2
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
avec
Code :
trunc(Date1) - trunc(Date2)
ou
Code :
extract(DAY FROM Date1) - extract(DAY FROM Date2)
où Date1 est la plus élevée
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 09h45   #3
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par boutss Voir le message
Code :
SELECT date1 - date2 FROM dual
me renvoie un interval avec une syntaxe particulière
c'est parceque date1 ou/et date2 sont des timestamps

extract me parait parfait !

Code :
1
2
3
4
extract(day FROM (date1-date2))+
extract(hour FROM (date1-date2))/24+
extract(minute FROM (date1-date2))/1440+
extract(second FROM (date1-date2))/86400
PS: pour le nombre de jour uniquement extract(day FROM (date1-date2))
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 09h48   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par Yorglaa Voir le message
Code :
extract(DAY FROM Date1) - extract(DAY FROM Date2)
ça ça se limite au dates du même mois, non?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 10h06   #5
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Moi, je ferais plus simple en passant par le jour julien :
Code :
1
2
SELECT abs(to_number(to_char(date1,'J'))-to_number(to_char(date2,'J')))
FROM ...;
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 10h10   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par philcero Voir le message
Moi, je ferais plus simple en passant par le jour julien :
Code :
1
2
SELECT abs(to_number(to_char(date1,'J'))-to_number(to_char(date2,'J')))
FROM ...;
je vois pas en quoi c'est plus simple que la solution de Yorglaa avec TRUNC?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 10h31   #7
Membre actif
 
Homme Vincent
Ingénieur développement logiciels
Inscription : août 2002
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 34
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2002
Messages : 237
Points : 151
Points : 151
Par défaut Merci à tous

Merci à tous pour vos réponses toutes plus instructives les unes que les autres !

à part la 2ème proposition de Yorglaa...

Et un grand respect à la maitrise incontestée et incontestable de Laurent Schneider !

... [Je me parle] ...
Alors tu vois, "trunc" fonctionne, "extract" fonctionne, et même "to_char ?!
Je le fais exprès de ne pas trouver ?? Pour ma paroisse, c'était vendredi soir.
boutss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 11h33   #8
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Citation:
je vois pas en quoi c'est plus simple que la solution de Yorglaa avec TRUNC?
Je retire mon adjectif "simple" et je le remplace par "universel". Cette méthode fonctionne quel que soit le langage, la machine ou bien la planète où elle est lancée...

Sans rire, j'avais pas l'habitude d'utiliser le TRUNC(DATE), c'est tout.

Merci Yorglaa...

philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 12h49   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
parlons planète

tout d'abord, un "jour", pour moi, c'est une rotation terrestre, donc il n'y a pas un jour entre ce soir minuit moins une et ce soir minuit, mais une 0.0007 jour !
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT 
trunc(Date1) - trunc(Date2) i1,
extract(day FROM (date1-date2))+
extract(hour FROM (date1-date2))/24+
extract(minute FROM (date1-date2))/1440+
extract(second FROM (date1-date2))/86400 i2
FROM (SELECT   timestamp '2008-05-20 00:00:00' date1, 
  timestamp '2008-05-19 23:59:00' date2  FROM dual);
        I1         I2
---------- ----------
         1 .000694444
et puis sur notre planète on n'a pas tous la même date
Code :
1
2
3
4
5
6
7
8
9
SELECT 
trunc(Date1) - trunc(Date2) i1,
extract(day FROM (date1-date2)) i2
FROM (SELECT 
  timestamp '2008-05-20 00:00:00 Pacific/Kiritimati' date1,
  timestamp '2008-05-17 23:59:59 Pacific/Niue' date2 FROM dual);
        I1         I2
---------- ----------
         3          0
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 13h30   #10
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Citation:
Envoyé par laurentschneider Voir le message
ça ça se limite au dates du même mois, non?
oui c'est juste, merci de me rectifier, j'ai été un peu vite !
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa 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 01h18.


 
 
 
 
Partenaires

Hébergement Web