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

Développement SQL Server Discussion :

Problème requete sql


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut Problème requete sql
    Bonjour,

    J'ai un souci avec ma requete sql dans laquelle la partie comparaison de date pose problème CONVERT(varchar, I_Birth_D, 103) = '".$date."'
    La variable $date est une variable dans laquelle je stocke juste la parie date de ma datetime $Date_Naiss.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    list($y,$m,$d)= split('[/.-]',$Date_Naiss);
    $date=substr($d,0,2).'/'.$m.'/'.$y; //format dd/mm/yyyy
     
    $sql = "SELECT User_Emp_Nb,I_Birth_D, CONVERT(varchar, I_Birth_D, 103) ";
    $sql.= "FROM allegro_user, allegro_user_infos ";
    $sql.= "Where User_Emp_Nb = I_Emp_Nb and CONVERT(varchar, I_Birth_D, 103) = '".$date."' ";
    Merci de m'aider à résoudre ce problème qui me prend la tête depuis quelques jours.

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Pour votre variable transformez là au format ISO YYYMMDD. Quoi que la comparaison s'effectuera quand même ... à voir ..

    Pour votre requête avec cette conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    Where User_Emp_Nb = I_Emp_Nb and CONVERT(varchar, I_Birth_D, 112) = '".$date."' ";
    Dans ce 1er cas si vous avez un index sur votre colonne I_Birth_D, vous ne pourrez pas l'utiliser. L'expression n'est pas sargable. Vous pouvez également faire ceci en bornant votre recherche sur la colonne date:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    Where User_Emp_Nb = I_Emp_Nb and  I_Birth_D BETWEEN '20100716 00:00:00' AND '20100716 23:59:59';
    Il faudra transformer votre variable $date dans ce cas.

    ++

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    bonjour,

    Quel est le problème ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    Bonjour, J'ai modifié un peu mon code mais cela ne marche toujours pas, j'ai pas trop compris pourquoi vous me conseillez de convertir le champs 'I_Birth_D' sous une autre forme puisque le CONVERT(varchar, I_Birth_D, 103) et le variable date on exactement le même format (dd/mm/yyyy), et pour votre information il n'y a pas d'index sur I_Birth_D.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $date=substr($Date_Naiss,8,2).'/'.substr($Date_Naiss,5,2).'/'.substr($Date_Naiss,0,4);
     
    $sql = "SELECT User_Emp_Nb,I_Birth_D, CONVERT(varchar, I_Birth_D, 103) ";
    $sql.= "FROM allegro_user, allegro_user_infos ";
    $sql.= "Where User_Emp_Nb = I_Emp_Nb and CONVERT(varchar, I_Birth_D, 103) = ".$date." ";
    $sql_result = $db->Execute($sql);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    Aidez moi svp je bloque

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    Incroyable, 5eme post et on ne sait toujours pas quel est votre soucis : on voit bien le code mais quel est votre problème ou quel message d'erreur avez-vous ?

    merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    Lors du premier post j'ai expliqué mon problème, mais je réexplique en fait c'est au niveau de ma requete sql que ça bloque et plus précisément sur le test CONVERT(varchar, I_Birth_D, 103) = '".$date"'

    Ce qui m'étonne le plus ce que quand je remplace la variable $date par la valeur qu'elle est censée contenir (08/04/1987 par exemple) ça marche, en plus le résultat du CONVERT(varchar, I_Birth_D, 103) et la variable $date ont exactement le même format.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    
    $chemin = dirname(__FILE__) . '/../../../../';
    require $chemin . 'configuration/configuration.php';
    require $chemin . 'fonctions.php';
    
    session_start();
    
    // Déclaration des variables
    // -------------------------
    
    $Date= $_REQUEST['Date'];
    
    
    if (isset($_SESSION['session'])) {
    	$session = $_SESSION['session'];
    }
    
    if (!session_is_registered('session') || !Session_ok($session)) {
    	rediriger($chemin . 'erreur_session.php');
    	exit;
    }
    
    require $chemin . 'configuration/' . languageSession($session) . '.php';
    
    header('Content-type: text/html; charset='.charsetSession($session));
    
    $date=substr($Date,8,2).'/'.substr($Date,5,2).'/'.substr($Date,0,4);
    
    $sql = "SELECT User_Emp_Nb,I_Birth_D, CONVERT(varchar, I_Birth_D, 103) ";
    $sql.= "FROM allegro_user, allegro_user_infos ";
    $sql.= "Where User_Emp_Nb = I_Emp_Nb and CONVERT(varchar, I_Birth_D, 103) = '$date'" ;
    $sql_result = $db->Execute($sql);
    if ($sql_result->RecordCount() > 0) 
    {
    
    	$data= '1';
    }
    else 
    {
    	$data= '0';
    }
    echo $data;
    
    ?>
    Merci par avance

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    Non vous n'expliquez pas votre problème : "ça bloque" ne permet pas de savoir quel est le problème.

    Donc votre soucis est qu'aucune ligne n'est retournée car le format de date est incorrect ?

    Pourquoi convertir I_Birth_D en varchar ? Est-ce que cette colonne est au format datetime ?

    Il faudrait en dire un peu plus sur cette table, merci.

    Vous pouvez également tracer la requête avec le profiler pour voir ce qui est vraiment envoyé à SQL Server.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    quand je dis ça bloque, cela veut dire que ça retourne pas de résultat alors que ça doit en retourner.

    Je fais CONVERT(varchar, I_Birth_D, 103) surtout pour pouvoir récupérer juste la partie date du Datetime I_Birth_D.


    Je fais tout ça sur un CMS et sur Internet explorer 6 car j'ai pas le droit d'installer d'autres choses (l'inconvénient des grosses boites).

    J'espère que c'est plus clair pour vous sinon n'hésitez pas.

    merci

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    Est-ce que la colonne I_Birth_D est au format datetime ?
    merci

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    oui oui I_Birth_D est un Datetime.

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    Donc comme l'indique mikedavem, vous feriez mieux de concaténer votre date comme suit et d'utiliser le between :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date1=substr($Date,0,4).substr($Date,5,2).substr($Date,8,2)+'00:00:00';
    $date2=substr($Date,0,4).substr($Date,5,2).substr($Date,8,2)+'23:59:59';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE User_Emp_Nb = I_Emp_Nb AND  I_Birth_D BETWEEN '$date1' AND '$date2';
    Si vous voulez persister dans votre solution, il faudrait utiliser le profiler pour tracer la requête et regarder à quoi elle ressemble.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    c'est bon ça marche merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème requete SQL dans PHP
    Par dl_jarod dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/04/2006, 14h40
  2. problème requete sql fusion de deux count
    Par TuxP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/12/2005, 15h15
  3. Problème requete SQL
    Par tonyskn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2004, 20h37
  4. problème requete sql
    Par Fred- dans le forum ASP
    Réponses: 2
    Dernier message: 13/06/2004, 02h20
  5. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31

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