IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Commande timediff()


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Par défaut Commande timediff()
    Bonjour, je souhaite récupérer la différence entre deux dates (accompagnées des heures)

    Avec des valeurs en dur ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIMEDIFF(  '2012:02:10 14:09:00',  '2012:02:09 12:00:00' )
    Par contre comme ceci, ça me retourne 00:00:00

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TIMEDIFF(  'date_cloture heure_cloture',  'date_ouverture heure_ouverture' ) 
    FROM intervention
    WHERE date_cloture =  '2012:02:10'
    AND heure_cloture =  '14:09:00'
    AND date_ouverture =  '2012:02:09'
    AND heure_ouverture =  '12:00:00'
    Ma table SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id int(11)	 		
    date_ouverture date	
    heure_ouverture time
    date_cloture date	
    heure_cloture time
    Pourquoi ai-je ce résultat ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avec des apostrophes, ce sont des chaînes de caractères que vous passez en paramètres.
    Pas d'apostrophe pour que ce soit bien les colonnes qui soit référencées, comme dans votre WHERE.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Par défaut
    Merci pour la réponse, mais sans apostrophes sans me dit qu'il y a un problème de syntaxe :/

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il faut concaténer la date et l'heure.

    En SQL standard, l'opérateur de concaténation est la double barre verticale ||.
    Il est possible que votre SGBD utilise un autre opérateur ; avec MySQL par exemple, il faut utiliser CONCAT.

    De plus, pour que la concaténation soit bien comprise comme une date et une heure, il faudra peut-être aussi convertir explicitement en type DATETIME à l'aide de CAST.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TIMEDIFF(CAST(date_cloture || ' ' || heure_cloture AS DATETIME), CAST(date_ouverture || ' ' || heure_ouverture AS DATETIME)) AS diff_temps
    FROM intervention
    WHERE date_cloture =  '2012:02:10'
    	AND heure_cloture =  '14:09:00'
    	AND date_ouverture =  '2012:02:09'
    	AND heure_ouverture =  '12:00:00'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Par défaut
    Merci pour cette explication. En effet j'utilise Mysql, j'ai testé avec l'opérateur CONCAT mais j'obtiens un résultat 'null' :/ (même résultat avec '||' )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT TIMEDIFF( CAST( CONCAT(  'date_cloture heure_cloture' ) AS DATETIME ) , CAST( CONCAT(  'date_ouverture heure_ouverture' ) AS DATETIME ) ) AS diff_temps
    FROM intervention
    WHERE date_cloture =  '2012:02:10'
    AND heure_cloture =  '14:09:00'
    AND date_ouverture =  '2012:02:09'
    AND heure_ouverture =  '12:00:00'
    LIMIT 0 , 30

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    C'est parce que tu as oublié l'espace entre la date et l'heure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT TIMEDIFF( CAST( CONCAT(  'date_cloture heure_cloture' ) AS DATETIME ) , ' ', CAST( CONCAT(  'date_ouverture heure_ouverture' ) AS DATETIME ) ) AS diff_temps
    FROM intervention
    WHERE date_cloture =  '2012:02:10'
    AND heure_cloture =  '14:09:00'
    AND date_ouverture =  '2012:02:09'
    AND heure_ouverture =  '12:00:00'
    LIMIT 0 , 30
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. [Kylix] Commandes linux ss kylix
    Par csnickos dans le forum EDI
    Réponses: 3
    Dernier message: 15/09/2002, 20h24
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo