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 :

Problème de date dans un between


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 141
    Par défaut Problème de date dans un between
    Bonjour,

    Juste une petite question toute bete surement

    J'ai une requete avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where Date_C between Convert(varchar, @@DateDebut, 103) And Convert(varchar, @@DateFin, 103)
    Seulement si je met DateDebut = '1/11/2007' et DateFin = '30/11/2007' Tous ce qui a pour date_c par exemple '30/11/2007 9:45:00' ne sont pas retourné.

    Est ce que le seul moyen pour moi est de formater le champ Date_c?

    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Par défaut
    Essais le To_char(date_c, 'DD/MM/YYYY')

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour
    Quel est le type de Date_c si c'est une date comme cela me semble, je ne comprends pas pourquoi tu convertis en varchar @@DateDebut et @@DateFin.

    Quels sont les type de @@DateDebut et @@DateFin?

    Par rapport à ta question initiale, si on imagine qu'il n'y a pas de problème de conversion de type, il semble normal de penser que le '30/11/2007 9:45:00' se situe après '30/11/2007' c'est à dire le '30/11/2007 00:00:00'.
    C'est un piège très classique de la gestion des champs datetime.
    PS; pour lux08 cela ressemble à du SQL server ou sybase, alors to_date, to_char n'existe pas. Néanmoins il est vrai que le SGBD n'est pas précisé contrairement aux règles du forum.
    Cordialement
    Soazig

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 141
    Par défaut
    En effet, excuser moi j'utilise SQL Serveur comme SGBD

    Date_C, @@DateDebut et @@DateFin sont de type DateTime

    De plus je les converti en varchar pour les formater en dd/mm/yyyy (format 103)

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 143
    Par défaut
    En comparant des dates converties en chaînes, on ne peut plus les ordonner puisque la comparaison se fait par ordre alphabétique
    Exemple : '30/01/2000' > '29/12/2007' est vrai
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par Abac_Angelique Voir le message
    En effet, excuser moi j'utilise SQL Serveur comme SGBD

    Date_C, @@DateDebut et @@DateFin sont de type DateTime

    De plus je les converti en varchar pour les formater en dd/mm/yyyy (format 103)
    Si les 3 sont de type DateTime, il n'y a aucune raison de les convertir !

    Bon courage

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 141
    Par défaut
    Je les converti en varchar pour enlever les heures sinon il me conpare aussi les heures

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Citation Envoyé par Abac_Angelique Voir le message
    Bonjour,

    Juste une petite question toute bete surement

    J'ai une requete avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where Date_C between Convert(varchar, @@DateDebut, 103) And Convert(varchar, @@DateFin, 103)
    Seulement si je met DateDebut = '1/11/2007' et DateFin = '30/11/2007' Tous ce qui a pour date_c par exemple '30/11/2007 9:45:00' ne sont pas retourné.

    Est ce que le seul moyen pour moi est de formater le champ Date_c?

    Merci
    Le comportement est normal, puisque '30/11/2007' équivaut à '30/11/2007 00:00'.

    Si il faut inclure les données de la journée du 30/11 alors il faut soit mettre @@DateFin à 01/12/2007, et faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where Date_C >= @@DateDebut and Date_C < @@DateFin
    ou alors utiliser le BETWEEN, mais mettre @@DateFin à '30/11/2007 23:59:59:999'

    Michael

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 042
    Billets dans le blog
    6
    Par défaut
    Plus généralement sur la manipulation des dates sous SQL Server :
    http://baptiste-wicht.developpez.com...-sql/datetime/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [CR10] Problème de date dans l'en-tête de groupe
    Par bernie.noel dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/08/2005, 00h48
  2. problème champ date dans base oracle
    Par ludovik dans le forum Oracle
    Réponses: 6
    Dernier message: 25/07/2005, 15h48
  3. Problème de date dans fonction utlisateur
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2005, 16h25
  4. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  5. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21

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