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

PHP & Base de données Discussion :

Recherche sur to_date


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut Recherche sur to_date
    Bonjour,

    Je vous explique mon problème : un utilisateur soumet un formulaire en remplissant (entre autre) un champ qui contient une date sous forme jjmmaa. Je voudrais faire une recherche avec cette date et les autres données qu'il aura rempli dans le formulaire. Or j'ai un problème quand il s'agit de faire la recherche sur la date. Je passe le résultat du champ de la date dans la variable $datef.

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ID, POS, TICK, DATE_TIME
    FROM PBC
    WHERE POS='$pose'
    AND TICK='$ticket'
    AND DATE_TIME=to_date('".$datef."','DDMMYY');
    J'ai fait le test de cette requête sans la dernière ligne, ou en cherchant avec sysdate au lieu de ma variable $datef, et j'ai eu des résultats : le reste du script (dont un tableau qui se remplit avec ID, POS et TICK) s'affiche, mais pas avec la requête du dessus.

    Je suis sure qu'il existe des infos avec les dates que je teste, et cette requête ne marche pas non plus si je rentre la date "à la main" dans ma requête, exemple : 050609.

    J'ai tenté toutes sortes de syntaxes : '".$_POST["datef"]."', '".$datef."', '.$datef.', $datef sans quotes ni guillemets... Je ne sais plus vraiment quoi utiliser.

    Petite précision, mon champ DATE_TIME est en timestamp, mais je ne pense pas que ça pourrait poser un problème...

    Merci de votre aide.

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    B'soir,

    Citation Envoyé par Laera Voir le message
    Petite précision, mon champ DATE_TIME est en timestamp, mais je ne pense pas que ça pourrait poser un problème...
    Bien si justement, les 2 formats de date doivent-être les mêmes pour comparaison.
    Je me demande pourquoi tu utilises to_date() en fait.

    Si tu ne veux que la partie date du champ timesatmp, il faut utiliser DATE() dessus.
    Ensuite $datef, doit-être au même format, donc anglais, ou alors tu convertis ton champ timestamp au format français avec date_format.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Bonjour Xunil, merci pour ta réponse.

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DATE(DATE_TIME)=TO_DATE('04-06-09','dd-mm-yy')
    mais j'ai une erreur, 'missing expression'. Et j'ai de nouveau utiliser un to_date, il me semble que c'est la fonction à utiliser...

    Le format des dates qu'il y a déjà dans la base de données est le suivant : 10-MAR-09, pour exemple.

    Ou alors tu convertis ton champ timestamp au format français avec date_format.
    Date_format est pour MySQL uniquement, l'équivalent Oracle est to_char, et je ne vois pas vraiment comme l'utiliser dans ma requête... Je veux dire, je convertis mon champ DATE_TIME au format français, pour ensuite insérer ma valeur $datef dedans ? En sachant que j'utilise bien le format de ma base de données, donc jj-mm-aa...

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Désolé, j'étais persuadé que tu travaillais avec mysql..

    Je ne connais pas oracle, mais en regardant la faq de developpez, tu devrais avoir quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DATE_TIME = TO_CHAR('" . $datedef . "', 'DD-MON-YYYY')
    Je suppose que $datedef est au format yyyy/mm/dd ? Enfin, il faut que ce soit le même format que sysdate.

    Mais bizarre de stocker un tel format de date dans une table.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Pas grave, ça arrive ;D

    Bon, alors j'ai changé le format de mon formulaire, à savoir date(d-M-y), donc 08-Jun-09. Un peu avant ma requête, dans mon script php, j'ai fais un $datef=strtoupper($datef); pour être sure que Jun sera un majuscule lors de ma requête : 08-JUN-09, le format "exact" des dates que j'ai dans ma bdd.

    Ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND DATE_TIME=TO_DATE('" . $datedef . "', 'DD-MON-YY')
    J'ai utilisé to_date car to_char me renvoyais une erreur, du genre "tu peux pas comparer un champ de date à une chaine de caractère", normal...

    Donc maintenant avec cette requête, j'arrive au même résultat qu'avant : rien. Mon script réagit comme si il n'y avait aucun résultat à ma requête, alors que si, j'ai vérifié sur ma base, il y en a.

    Mon problème se situe vraiment sur le format de cette foutue date...

    Un problème avec l'heure peut être ? En tant que timestamp, le champ attend peut être une heure ? Même si les dates que j'ai dans ma BDD ne contiennent pas d'heure ? Dans ce cas, en sachant que l'utilisateur ne soumet que le jour, le mois et l'année, comment pourrais-je insérer l'heure en plus ?

    Je viens de vérifier sur les documents qui m'ont été fournis par mon chef, le type du champ DATE_TIME est un timestamp(2) : précision à deux chiffres pour les secondes...

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Comment sont les enregistrements dans ta colonne DATE_TIME en fait ?

    Tu devrais faire une simple requête de test pour voir les différences.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATE_TIME, TO_DATE('" . $datedef . "', 'DD-MON-YY') FROM ...

Discussions similaires

  1. Recherche sur tous les fichiers d'un projet
    Par Kaorichan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2005, 11h28
  2. Recherche sur mots de 3 lettres
    Par mamizo dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/02/2005, 14h59
  3. Réponses: 2
    Dernier message: 30/11/2004, 09h42
  4. Réponses: 8
    Dernier message: 10/09/2004, 17h30
  5. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04

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