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

Requêtes MySQL Discussion :

Recherche sur date avec une colonne de type varchar


Sujet :

Requêtes MySQL

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Par défaut Recherche sur date avec une colonne de type varchar
    Bonjour, titre pas très clair, je m'explique :

    J'ai une colonne dans une table de type varchar se nommant : date_depart
    J'ai typé cette colonne en varchar car on peux y saisir soit un texte (ex : dimanche) soit une date réel : 16-08-2008 12:01:00

    Mais j'avoue que je cale completement pour faire une requete sur cette table afin de sortir uniquement les lignes dont la date (date_depart) soit supérieur à la date du jour en cours...

    Je ne maîtrise pas assez le langage sql pour pondre la requête qui va bien.

    Donc si une âme charitable peux ou veux bien m'aiguiller dans ma recherche...

    Merci d'avance

    Fab

  2. #2
    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 : 62
    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
    Le format de date normal en MySQL est 'AAAA-MM-JJ' donc il faudrait déjà essayer si l'instruction ci-dessous fonctionne pour transformer tes dates de texte en date. Bien sûr, 'dimanche' ne sera pas converti, voir auusi comment il réagit (erreur ou lignes ignorées ou résultat incohérent...).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT colonneIdentifiant, CAST(date_depart AS DATE) AS DateConvertie
    FROM TaTable
    A comparer avec la table d'origine à l'aide de l'identifiant.

    Ensuite si c'est bon, tu peux faire une restriction en utilisant CAST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE CAST(date_depart AS DATE) > CURRENT_DATE
    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 !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Par défaut
    Merci pour aide CinePhil,

    ça fonctionne bien, par contre le requete est relativement lourde comparé à une recherche sur une colonne de type DATE.

    Pour un test de (précision, sur la table de prod le type est DATE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT date_depart
    FROM matable
    WHERE etat =1
    AND (
    date_depart != '0000-00-00 00:00:00'
    OR date_depart >= NOW( )
    ) LIMIT 100
    sur la table de prod avec 9 949 entrées je suis à "Affichage des enregistrements 0 - 99 (100 total, traitement: 0.0019 sec.)"

    Pour un test sur la table de dev (pour rappel le type est VARCHAR) avec 2 471 entrées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CAST( date_depart AS DATE ) AS DateConvertie
    FROM matable
    WHERE etat =1
    AND CAST( date_depart AS DATE ) > CURRENT_DATE LIMIT 100
    Je suis à "Affichage des enregistrements 0 - 17 (18 total, traitement: 0.0211 sec.)"

    Est ce que du coup, ce ne serait pas judicieux de créer une nouvelle colonne, une rempli si la valeur est date et l'autre si la valeur est texte?

    Merci pour ces avis éclairés

    Fab

  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 : 62
    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
    Citation Envoyé par Cladjidane Voir le message
    Est ce que du coup, ce ne serait pas judicieux de créer une nouvelle colonne, une remplie si la valeur est date et l'autre si la valeur est texte?
    Si tu dois faire souvent des calculs sur les dates et/ou que ton volume de données est très gros, c'est en effet une idée à suivre.

    Juste une question conceptuelle en passant...
    Quand tu dis :
    on peux y saisir soit un texte (ex : dimanche) soit une date réel : 16-08-2008 12:01:00
    La notion 'dimanche' signifie t-elle 'dimanche prochain' ou 'chaque dimanche' ?
    Si c'est 'dimanche prochain' autant programmer un truc pour que dans la base ce soit la date réelle.
    Si c'est 'chaque dimanche', tu peux créer ta nouvelle colonne de format date pour les dates fixes et la colonne existante, purgée des dates fixes, deviendrait une colonne de périodicité.

    Sans connaître l'ensemble de ta base, j'ai l'idée que tu peux peut-être aussi peut-être externaliser ces notions de date et de périodicité.
    Il s'agit semble t-il de voyages...
    On peut imaginer une table Voyages qui accueillerait les caractéristiques des voyages sans les dates, une table VoyagesPeriodiques qui enregistrerait pour certains voyages leur périodicité et une table Departs qui enregistrerait les dates réelles des voyages et permettrait de gérer un planning (de chauffeurs, de bus, de voyages...).

    Ceci pour dire qu'il n'est peut-être pas inutile de se poser la question si le modèle de données tient la route face aux nouveaux besoins.
    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 !

Discussions similaires

  1. [XL-2010] Filtre sur dates avec une cellule
    Par Daniel.C dans le forum Excel
    Réponses: 7
    Dernier message: 26/04/2013, 15h09
  2. Copie d'une table avec une colonne du type image
    Par mma67 dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 12/02/2010, 19h13
  3. jTable avec une colonne de type button radio
    Par RouRa22 dans le forum Composants
    Réponses: 1
    Dernier message: 20/11/2008, 17h36
  4. Réponses: 2
    Dernier message: 06/05/2008, 10h52
  5. Réponses: 3
    Dernier message: 22/10/2006, 23h15

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