Recherche sur un format date

Ish
Eléphant du PHP | 200 Messages

13 févr. 2007, 19:01

Bonjour,

je voudrais faire une requete sur une table avec une clause "Where" sur un champ date du type "18/01/2005 09:09:17"

Mais je veux prendre les champs entre les dates "18/01/2005" et "18/01/06" sans me soucier de l'heure

exemple :

Code : Tout sélectionner

Select * From Table Where date>"18/01/2005" AND date<"18/01/06"
Je ne sais pas comment faire !! ... est-ce que je dois utiliser des clause "Like"
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 févr. 2007, 19:28

Tout d'abord, comment se présentent les données dans une colonne de type DATE ?

Pas sous cette forme en tout cas : jj/mm/aaaa

Pour t'aider ensuite, il y a un sujet sur les dates dans la FAQ, avec un lien vers le manuel MySQL

Ish
Eléphant du PHP | 200 Messages

14 févr. 2007, 10:26

Tout d'abord, comment se présentent les données dans une colonne de type DATE ?

Pas sous cette forme en tout cas : jj/mm/aaaa

Pour t'aider ensuite, il y a un sujet sur les dates dans la FAQ, avec un lien vers le manuel MySQL
Merci je vais aller regarder du coté de la FAQ !!
le format de ma date est : jj/mm/aaaa hh:mm::ss

Donc dans ma table j'ai le champ 'dateDeb' et je voudrais toutes les lignes dont la date est supérieur à 01/01/2007

Donc ma requete serait du style ;

Code : Tout sélectionner

Select * from table Where dateDeb > '01/01/2007
-----------------------------------------------------------------
Je viens de lire la FAQ mais je n'ai rien trouver sur ce que je souhaitais, de plus je suis sous Oracle donc les fonctions de MySQL ne m'interesse pas.
Modifié en dernier par Ish le 14 févr. 2007, 11:04, modifié 1 fois.
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

14 févr. 2007, 11:01

Merci je vais aller regarder du coté de la FAQ !!
le format de ma date est : jj/mm/aaaa hh:mm::ss
Si c'est une colonne de type date, ça m'étonnerait.

Si c'est vraiment le format que tu as dans ta base, alors c'est que tu as un type genre VARCHAR et c'est très mauvais. Comment veux-tu faire des tris avec ce format ? Comment veux-tu utiliser les fonctions ? De plus, un Varchar prend 3 fois plus de place qu'un type date.

Ish
Eléphant du PHP | 200 Messages

14 févr. 2007, 11:20

Eh bien c'est la façon dont je le vois dans ma table et il m'indique bien que c'est de type 'date'. Ce n'est pas moi qui est fait la base de donnée (sous Oracle) donc ... je ne sais pas comment faire !!!

Est-ce qu'il n'y a pas un moyen de de dire "Where date = '18/01/2007"+%
Ce n'est qu'une idée mais le +% dirait que on se fou de ce qu'il y après, un peu comme les chaines de caractères !!!
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Ish
Eléphant du PHP | 200 Messages

14 févr. 2007, 11:29

Je pense que le champ est de type DateTime
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

14 févr. 2007, 11:47

Je viens de lire la FAQ mais je n'ai rien trouver sur ce que je souhaitais, de plus je suis sous Oracle donc les fonctions de MySQL ne m'interesse pas.
Il faudrait prendre l'habitude de préciser le SGBD utilisé, ici personne ne le fait, alors on part naturellement sur du MySQL

Pourquoi ne pas l'avoir dis dès le début ?

Fais un "desc" de ta table pour être sûr du type

Sinon, tu as regardé dans le manuel Oracle s'il y a des fonctions équivalentes à celle de MySQL ? :roll:

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 11:53

Bonjour,

De toutes manières cette syntaxe
"Where date = '18/01/2007"+% 
est incorrecte quel que soit le SGBD(R).
Tu dois utiliser
"Where date LIKE '18/01/2007%'" 
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 88 Messages

14 févr. 2007, 16:22

Salut,

tu peux essayer de formater ta date en gardant ce format : annee/mois/jour.
Ainsi tu pourras facilement faire un tri.

Cet article pourra peut être t'aider: essaye to_date() ou to_char() ou un substr().
http://www.asp-php.net/tutorial/asp-php ... es_sql.php

bon courage

Ish
Eléphant du PHP | 200 Messages

15 févr. 2007, 12:44

Bonjour,

j'ai enfin trouver ... il faut utiliser to_date() et ça marche impécable

J'aurais une petite question qui n'a rien à voir avec le reste mais qui reste en rapport avec le SQL. Comment on fait pour dire dans une requête SQL que l'on veut afficher seulement les 50 premiers élements de la recherche.
Je sais qu'on le fait en PHP mais je voulais savoir si on pouvait le faire en amont !!

Merci
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

ViPHP
ViPHP | 1961 Messages

15 févr. 2007, 12:48

Bonjour,

Sous Oracle "ROW NUM < 50" ou bien "ROWNUM < 50" sans espace (à vérifier)

Sous MySQL "LIMIT 0, 50"
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 févr. 2007, 13:48

"ROWNUM < 50" sans espace
Je valide cette syntaxe ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Ish
Eléphant du PHP | 200 Messages

15 févr. 2007, 14:19

Bonjour,

Sous Oracle "ROW NUM < 50" ou bien "ROWNUM < 50" sans espace (à vérifier)

Sous MySQL "LIMIT 0, 50"
Le probleme de cette syntaxe ... et que quand je fais :

Code : Tout sélectionner

Select * From table Where .... AND Rownum < 50 Order by champ2 DESC
cela me prend les premiers et pas les derniers comme je le veux !!
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

Ish
Eléphant du PHP | 200 Messages

15 févr. 2007, 14:32

Je viens de trouver ... en fait il faut tout encapsuler dans un autre select :

Code : Tout sélectionner

SELECT * FROM (SELECT * FROM table Where ..... Order by champ2 Desc) Where rownum < 20
Merci quand même ... ciao !!
La vie est faite d'imprevu, et l'imprevu fait la vie
Gardez la peche !!

ViPHP
ViPHP | 3607 Messages

15 févr. 2007, 15:36

je pense qu'avec

Code : Tout sélectionner

Select * From table Where .... AND Rownum < 50 Order by champ2 ASC
ça devrait le faire non?
(j'ai changer desc en asc)