Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2013, 10h46   #1
nico_loin
Invité de passage
 
Homme Nicolas
Développeur informatique
Inscription : 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.
nico_loin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h51   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 573
Points : 25 573
Envoyer un message via MSN à CinePhil
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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h57   #3
nico_loin
Invité de passage
 
Homme Nicolas
Développeur informatique
Inscription : 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
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 ?
nico_loin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 11h35   #4
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 573
Points : 25 573
Envoyer un message via MSN à CinePhil
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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 09h21   #5
nico_loin
Invité de passage
 
Homme Nicolas
Développeur informatique
Inscription : 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
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
nico_loin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 09h31   #6
nico_loin
Invité de passage
 
Homme Nicolas
Développeur informatique
Inscription : 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
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
nico_loin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 09h56   #7
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 573
Points : 25 573
Envoyer un message via MSN à CinePhil
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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h11   #8
nico_loin
Invité de passage
 
Homme Nicolas
Développeur informatique
Inscription : 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
Merci c'est super cool ça fonctionne très bien !!
nico_loin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h05.


 
 
 
 
Partenaires

Hébergement Web