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

Oracle Discussion :

Decode sur date


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut Decode sur date
    Bonjour à tous,

    j'aimerais faire un "decode" ou un "case when" de ceci :

    Si [date_debut] > Date du jour - 1 jour à 23:59:59
    Alors 0
    Sinon [date_fin] - [date_debut] en secondes (sans arrondi)
    Fin Si

    merci de vos retours

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Ben même principe que pour l'autre post...
    Pour info la soustraction entre 2 dates donne un résultat en nombre de jour, le 24*60*60 correspond aux heures minutes secondes afin de faire la conversion en seconde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SQL> with t as (
      2  select to_date('03/12/2012 14:25:32','dd/mm/yyyy hh24:mi:ss') as date_debut, to_date('04/12/2012 18:14:21','dd/mm/yyyy hh24:mi:ss') as date_fin from dual union all
      3  select to_date('01/12/2012 17:11:03','dd/mm/yyyy hh24:mi:ss') as date_debut, to_date('01/12/2012 17:58:17','dd/mm/yyyy hh24:mi:ss') as date_fin from dual union all
      4  select to_date('05/12/2012 23:25:32','dd/mm/yyyy hh24:mi:ss') as date_debut, to_date('06/12/2012 18:14:21','dd/mm/yyyy hh24:mi:ss') as date_fin from dual
      5  )
      6  SELECT case when date_debut > trunc(sysdate)-1/24/60/60 then 0 else (date_fin-date_debut)*24*60*60 end as result
      7    FROM t;
     
        RESULT
    ----------
        100129
          2834
             0
     
    SQL> select 1354666461 - 1354566332 from dual;
     
    1354666461-1354566332
    ---------------------
                   100129
     
    SQL>
    Le deuxième select correspond à la différence des dates de la 1ere ligne en unix timestamp... même résultat, pas d'arrondi.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut
    Merci beaucoup

  4. #4
    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 : 47
    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
    Vous pouvez simplifier :
    Si [date_debut] > Date du jour - 1 jour à 23:59:59 
    En :
    Si [date_debut] >= Date du jour arrondie au jour
    Et donc en SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case when date_debut > trunc(sysdate)-1/24/60/60 then 0
    Devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case when date_debut >= trunc(sysdate) then 0

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous pouvez simplifier :

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

Discussions similaires

  1. [CR] pb (concaténation/Conversion/Addition) sur date/heure
    Par marvel dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 20/12/2004, 15h31
  2. Requête sur date
    Par guenfood dans le forum Access
    Réponses: 11
    Dernier message: 08/12/2004, 16h11
  3. [Debutant(e)]operation sur dates
    Par sUrTr dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/10/2004, 15h58
  4. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 15h34
  5. Calcul sur date
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/09/2003, 08h55

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