Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/03/2008, à 15:37

Daxorp

Récupérer les anniversaire en SQL?

Bonjour,

J'ai vu qu'il y avait des pro en SQL ici wink alors j'ai une question coton: il faut que je fasse un filtre pour récupérer les clients nés au mois X.


Mais les dates de naissance sont des dates complètes 01/01/1970. Comment puis-je dire WHERE mois de naissance = 01 par exemple?

Je vais quand m^ pas faire une clause WHERE pour toutes les années possible. neutral

#2 Le 03/03/2008, à 16:01

johnlege

Re : Récupérer les anniversaire en SQL?

bonjour,
WHERE substr(date_naissance,4,2) = mois_choisi ou quelque chose du genre cela ne fonctionnerait pas ?


Merci d'indiquer résolu dans le titre quand c'est résolu

Hors ligne

#3 Le 03/03/2008, à 17:01

whalexis

Re : Récupérer les anniversaire en SQL?

Bonjour,

En fait ça dépend de la base de données avec laquelle tu travailles car il existe des différences dans les SQL.

Avec postgres, tu peux faire ça :

WHERE EXTRACT(MONTH FROM ma_date) = mon_mois

Avec Oracle, tu peux faire ça :

WHERE TO_NUMBER(FORMAT(ma_date,"mm")) = mon_mois

J'espère que ça pourra t'aider:)

Dernière modification par whalexis (Le 03/03/2008, à 17:01)

#4 Le 03/03/2008, à 17:11

insomniak

Re : Récupérer les anniversaire en SQL?

Salut,

Il doit y avoir une fonction qui sait retourner le jour de l'année par rapport à une date (du style dayOfYear ou un truc du genre). Il suffit que tu recupere le dayofyear de la date de naissance, le dayofyear de now() et si ils sont égaux => pintf("Happy Birthday mr president");

C'est le plus simple que je puisse voir qui t'évite trois mille manips ou requetes.
++

Edit : A confirmer : je ne sais pas comment cela se passe pour les années bissextiles (en gros, si le 1er Mars est décalé d'un jour en bissextile et pas décalé le reste du temps).
Pour tester, c'est pas bien méchant :
si Dayofyear( 1er mars 2007) <> Dayofyear( 1er mars 2008) alors ma méthode plus haut n'est pas viable...

Dernière modification par insomniak (Le 03/03/2008, à 17:13)

Hors ligne

#5 Le 03/03/2008, à 17:36

Daxorp

Re : Récupérer les anniversaire en SQL?

Oui, j'ai oublié de préciser que c'est sur MySQL.

substr est connu, SELECT substr ('12345678', 2, 4) marche, mais dès que je le met dans un WHERE il me dit que la fonction n'existe pas.


Mais je vais chercher dans la doc, merci pour vos suggestions.:)

#6 Le 03/03/2008, à 17:44

insomniak

Re : Récupérer les anniversaire en SQL?

si tu fais un SELECT substr(10011960,2,3) AS dtnaiss, substr(now(),2,3) AS dttoday FROM... WHERE dtnaiss = dttoday

ou un truc du genre (attention les nombres inscrits sont totalement débiles, je n'ai pas pris le temps de faire des substr corrects)

Hors ligne

#7 Le 03/03/2008, à 17:47

Daxorp

Re : Récupérer les anniversaire en SQL?

Ah avec SUBSTRING (clients.ne_le, 2, 4) ça a l'air de marcher.

#8 Le 03/03/2008, à 18:20

whalexis

Re : Récupérer les anniversaire en SQL?

Re,

Voici ce que j'ai trouvé sur cette page

mysql> SELECT nom, naissance FROM animal
    -> WHERE MONTH(naissance) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));

Je crois que c'est exactement ce que tu cherches

#9 Le 04/03/2008, à 10:16

Daxorp

Re : Récupérer les anniversaire en SQL?

D'acco-d'ac! smile

Alors ça marche: SELECT * FROM clients WHERE MONTH(ne_le) = '04';



Par contre le SUBSTRING, qui devrait être l'équivalent MySQL de SUBSTR, ça ne marche pas.
SUBSTRING ('1234-56-78', 4, 2) donne '-5'
SUBSTRING ('1234-56-78', 5, 2) donne '6-'

Je comprend pas! lol Mais MONTH marche très bien. Merci à tous! smile

#10 Le 04/03/2008, à 12:13

whalexis

Re : Récupérer les anniversaire en SQL?

Bonjour,

Il me semble que la fonction MONTH te fourni une valeur numérique. Il n'est donc pas nécessaire de mettre ta valeur de test entre ' . En faisant ça, MySQl est obligé de faire une conversion automatique de ta valeur.
Essaye d'écrire juste

MONTH(ma_date) = mois

Comme ton problème est résolu, peux tu l'indiquer dans le titre de ton post?
Merci

Dernière modification par whalexis (Le 04/03/2008, à 12:16)