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

MS SQL Server Discussion :

datediff pour TO_DAYS


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Par défaut datediff pour TO_DAYS
    Bonjour,

    Toujours dans mon souci de transformer mes anciennes requêtes MySQL en MS-SQL, j'ai du mal à trouver un équivalent à TO_DAYS.
    J'ai trouvé datediff mais je n'arrive pas à l'appliquer. Le format de mon champ date_releve est aaaa-mm-jj et je ne comprends pas à quel format ça correspond.

    Voici ma requête (MySQL) :

    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
    SELECT TOP 25 PARCS.CODE_PARC, PARCS.NO_IMMAT, 
    PARCS.REFERENCE_CLIENT, MODELES.MODELE, ANNEXES.FORFAIT_KM_ANNEXE, 
    ( MAX(RELEVE_COMPTEUR.KM_DECLARE_RELEVE) - MIN(RELEVE_COMPTEUR.KM_DECLARE_RELEVE) ) as CUMUL_CONSOMME,
    ( ( MAX(RELEVE_COMPTEUR.KM_DECLARE_RELEVE) - MIN(RELEVE_COMPTEUR.KM_DECLARE_RELEVE) ) / ( TO_DAYS(MAX(RELEVE_COMPTEUR.DATE_RELEVE)) - TO_DAYS(MIN(RELEVE_COMPTEUR.DATE_RELEVE)) )*30 ) as CONSO_MENSUELLE,
    ( ( ( MAX(RELEVE_COMPTEUR.KM_DECLARE_RELEVE) - MIN(RELEVE_COMPTEUR.KM_DECLARE_RELEVE) ) / ( TO_DAYS(MAX(RELEVE_COMPTEUR.DATE_RELEVE)) - TO_DAYS(MIN(RELEVE_COMPTEUR.DATE_RELEVE)) )*30 ) / ANNEXES.FORFAIT_KM_ANNEXE*100 ) as SIMULATION 
    FROM PARCS, CLIENTS, ANNEXES 
    left join MODELES on MODELES.CODE_MODELE=PARCS.CODE_MODELE 
    left join AGENCES on AGENCES.CODE_AGENCE=PARCS.CODE_AGENCE
    LEFT JOIN RELEVE_COMPTEUR ON (PARCS.CODE_PARC=RELEVE_COMPTEUR.CODE_PARC) 
    where CLIENTS.CODE_CLIENT in ('0001804**','0000900**','0000539**') 
    and RELEVE_COMPTEUR.DATE_RELEVE >= ANNEXES.DATE_DEBUT_ANNEXE 
    and ANNEXES.CODE_CLIENT=CLIENTS.CODE_CLIENT 
    and ANNEXES.CODE_PARC=PARCS.CODE_PARC 
    and RELEVE_COMPTEUR.CODE_PARC=PARCS.CODE_PARC 
    and (ANNEXES.CODE_TYPE_ANNEXE in ('B','I','C','V'))
    group by PARCS.CODE_PARC ORDER BY CODE_PARC asc
    Merci à celui qui pourra m'expliquer le fonctionnement de DATEDIFF ou plutôt la façon de l'appliquer dans ce cas.

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,
    Datediff ne retourne pas une différence avec la date 0, commme to_days, mais une différence entre deux dates.

    donc qqch comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DATEDIFF(day, MIN(RELEVE_COMPTEUR.DATE_RELEVE), MAX(RELEVE_COMPTEUR.DATE_RELEVE))
    Un exemple d'appel de datediff :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATEDIFF(day, '20060101', '20060130')

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Par défaut
    ok rudib, merci, je vais essayer ça.
    mais si ma date est en format avec tirets : 2006-07-03
    avec le mot "day", il va comprendre ?

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Quel est le type de données de ta colonne ?
    Si c'est un datetime ou smalldatetime, il n'y a pas de concept de format, la valeur est stockée en interne en deux entiers, un pour la date, un pour le time, et converti en chaîne pour être affiché.

    Si le type de ta colonne est char ou varchar, formaté comme tu dis, il devrait faire une conversion implicite et ça devrait passer également.

Discussions similaires

  1. Problème pour évaluer un alias avec DATEDIFF
    Par Stephane_br dans le forum Développement
    Réponses: 3
    Dernier message: 14/09/2011, 15h08
  2. Problème format date pour utilisation DateDiff
    Par sat478 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/05/2010, 16h28
  3. [PHP 5.0] To_days pour la semaine
    Par blasil64 dans le forum Langage
    Réponses: 6
    Dernier message: 15/10/2009, 16h16
  4. Probleme avec DateDiff pour les années....
    Par angelevil dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 27/03/2006, 09h19
  5. Equivalent a fonction DATEDIFF pour MySQL version 3.23
    Par npze dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 31/10/2005, 11h18

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