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 :

Requete avec date


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2011
    Messages : 115
    Points : 73
    Points
    73
    Par défaut Requete avec date
    Bonjour,

    J'ai un peu de mal avec une requete, je n'ai pas la notion d'utilisation du SET DATEFORMAT. voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SET DATEFORMAT DMY
    SELECT CAST(dt_event AS datetime),ID1,ID2,ID3,CONVERT(VARCHAR,libelle) AS Erreur
    FROM DBA.events
    WHERE ID1 IS NOT NULL AND ID2 IS NOT NULL AND ID1 != '-1';
    OUTPUT TO events.txt
    FORMAT ASCII
    DELIMITED BY ';' QUOTE '"'
    Je cherche a avoir les quelques résultats commencants par ce format : dd/MM/yyyy, la suite apres les points virgules.
    exemple de résultat obtenu actuellement :
    2010-12-30 06:16:35.0;106996;1;1;defaut1-2
    Ce que je cherche :
    30/12/2012;106996;1;1;defaut1-2

    J'aimerai au final pouvoir faire des requete BETWEEN.
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE date BETWEEN '22/11/2011' AND '30/11/2011'
    par exemple.
    Pouvez vous m'éclairer ? merci.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Pour transtyper un DATETIME en VARCHAR dans un format précis, utilisez CONVERT en spécifiant le format (103 dans votre cas me semble-t-il)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CONVERT(VARCHAR(10), GETDATE(), 103)
     
    -- Résultat
    -- 28/01/2013


    Par contre, quel est le type de votre colonne dt_event , pourquoi la castez vous ne DATETIME ?

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2011
    Messages : 115
    Points : 73
    Points
    73
    Par défaut
    salut et merci pour ta réponse. Oui il s'agit bien du 103 pour avoir dans notre format. Le problème avec le convert c'est que mes requetes BETWEEN ne fonctionnent pas par la suite.. par exemple pour un BETWEEN '25/12/2012' AND '30/12/2012' j'obtiens entre le 25 et le 30 de chaque mois contenu dans la base de données...

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par frag132 Voir le message
    par exemple pour un BETWEEN '25/12/2012' AND '30/12/2012' j'obtiens entre le 25 et le 30 de chaque mois contenu dans la base de données...
    C'est la raison pour laquelle je vous demandais :

    Par contre, quel est le type de votre colonne dt_event
    On va supposer que c'est du VARCHAR, le mieux serait donc de la passer en DATETIME (ou DATE).

    A défaut, vous pouvez également utiliser CONVERT pour transtyper vos varchar en date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE CONVERT(DATE, dt_event, 103) BETWEEN '2012-12-25' AND '2012-12-30'
    Mais avec cette solution, vous ne profiterez pas d'un eventuel index sur la colonne dt_event...

    Passez dt_event en DATE ou DATETIME !

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2011
    Messages : 115
    Points : 73
    Points
    73
    Par défaut
    merci pour ta réponse.
    Je n'avais pas vu le bas de ton post autant pour moi, en tout cas ce que tu me propose maintenant fonctionne tres bien. j'obtiens bien ce que je voulai et je t'en remercie.
    Derniere petite question, comment je peux faire pour obtenir tous les résultat des 3 derniers mois par exemple a partir du jour de la requete ? Avec GETDATE() non ?

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    en effet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE CONVERT(DATETIME, dt_event, 103) > DATEADD(MONTH, -3, GETDATE())

    Mais la encore, cette requête pourrait profiter d'un index si la colonne dt_event était de type date ou datetime

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2011
    Messages : 115
    Points : 73
    Points
    73
    Par défaut
    merci beaucoup. Tout est bon. Concernant l'index ce ne fait rien ca ne va pas me déranger .
    Je marque comme résolu et j'éspère que ca pourra en depanner d'autres que moi.
    Merci encore

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

Discussions similaires

  1. [MySQL] requete avec date du jour - 30
    Par le69 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 31/01/2013, 15h38
  2. [Access] requête avec date
    Par hiko-seijuro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/08/2006, 09h05
  3. [debutant]Probleme de requete avec date
    Par shub dans le forum Access
    Réponses: 9
    Dernier message: 12/05/2006, 10h01
  4. requete avec date et heure
    Par robert_trudel dans le forum Access
    Réponses: 2
    Dernier message: 26/04/2006, 00h15
  5. [MySQL] requete avec date
    Par le69 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/12/2005, 21h31

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