Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    Homme Profil pro Nicolas
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2012
    Messages : 26
    Points : 0
    Points
    0

    Par défaut Afficher uniquement quand la date est supérieure à 2010

    Bonjour, j'ai une requete qui me renvoie plusieurs lignes, mais j'aimerais que cette requete me renvoie seulement les lignes donc le champ date est supérieure à 2010. Le problème c'est que dans ma base le champ date est de la forme (mm/YYYY) en gros : 01/2010.
    J'aimerais donc afficher seulement les date dont l'année est supérieure à 2010.
    Lorsque je fais un select * from matable where date >= 01/2010 j'ai tout qui s'affiche car il s'arrete à 01 je pense ...
    J'ai essayé un where date >= LIKE "%2010" mais ça marche pas ...
    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 50
    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 : 13 713
    Points : 25 575
    Points
    25 575

    Par défaut

    Il vaudrait mieux avoir une vraie colonne (et pas champ ! ) de type DATE ou bien une colonne pour le mois et une autre pour l'année.

    En l'état actuel :
    Code :
    1
    2
    3
    SELECT -- les colonnes nécessaires
    FROM matable
    WHERE CAST(RIGHT(la_colonne, 4) AS UNSIGNED) > 2010
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Invité de passage
    Homme Profil pro Nicolas
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2012
    Messages : 26
    Points : 0
    Points
    0

    Par défaut

    ah génial merci beaucoup ça marche !
    Et je voulais dire colonne et non champ en effet ce serait plus clair comme tu dis.
    J'avais encore jamais vu ce CAST, je suppose qu'on met right, left suivant ce que l'on veut, puis UNSIGNED ça sert à quoi ?

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 50
    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 : 13 713
    Points : 25 575
    Points
    25 575

    Par défaut

    CAST permet de transformer le type de donnée issue d'une colonne ou une autre donnée exprimée en clair.

    Ici je transforme les 4 caractères situés à droite de la colonne de date en UNSIGNED, c'est à dire en entier non signé, de façon à pouvoir comparer ce nombre à 2010 sans ambiguïté.

    CAST est du SQL standard mais UNSIGNED est un type spécifique à MySQL. Avec un autre SGBD, il vaudrait mieux utiliser INTEGER.

    Vérifie quand même que toutes tes dates sont bien au format mm/aaaa et qu'il n'y en ait pas avec une année sur deux chiffres.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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 !

  5. #5
    Invité de passage
    Homme Profil pro Nicolas
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2012
    Messages : 26
    Points : 0
    Points
    0

    Par défaut

    Merci pour tes informations.

    Le problème c'est que je veux afficher le résultat sur les 2 dernières années (mois/année donc 24 mois enfait) et là ça prends pas en compte le mois mais seulement l'année. J'avais pensé faire avec un CAST(LEFT(la_colonne, 2) AS UNSIGNED) > 02 mais ca le fait pour toutes les dates lors qu'il faudrai le faire que pour 02/2011 jusqu'à aujourd'hui

  6. #6
    Invité de passage
    Homme Profil pro Nicolas
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2012
    Messages : 26
    Points : 0
    Points
    0

    Par défaut

    Mes dates sont bien au format MM/AAAA, une vérification est faite lors de l'envoi du formulaire dans la base de donnée.
    Je bloque sur l'affichage des 24 derniers mois enfait, je vois pas comment m'y prendre

  7. #7
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 50
    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 : 13 713
    Points : 25 575
    Points
    25 575

    Par défaut

    Essaie avec STR_TO_DATE :
    Code :
    1
    2
    3
    SELECT -- les colonnes nécessaires
    FROM matable
    WHERE STR_TO_DATE(la_colonne_date, '%m/%Y') BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 24 MONTH) AND CURRENT_DATE
    Il est possible cependant que le résultat soit légèrement faussé dans certains cas car je crois que STR_TO_DATE(la_colonne_date, '%m/%Y') va transformer la chaîne de caractères en 'aaaa-mm-01' et le premier mois de la période souhaitée pourrait ne pas être pris en compte lorsque la requête est lancée après le premier jour du mois.

    Il faudrait alors compliquer un peu la formule :
    Code :
    1
    2
    3
    4
    5
    SELECT -- les colonnes nécessaires
    FROM matable
    WHERE STR_TO_DATE(la_colonne_date, '%m/%Y')
    	BETWEEN STR_TO_DATE(DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 24 MONTH), '%Y-%m'), '%Y-%m')
    		AND STR_TO_DATE(DATE_FORMAT(CURRENT_DATE, '%Y-%m'), '%Y-%m')
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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 !

  8. #8
    Invité de passage
    Homme Profil pro Nicolas
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2012
    Messages : 26
    Points : 0
    Points
    0

    Par défaut

    Merci c'est super cool ça fonctionne très bien !!

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •