[SQL] % ne fonctionne pas !?

Résolu
Bonjour,

dans ma table, j'ai fait la requête suivante :

SELECT*
FROM Products
WHERE ProductName IN ('%NV')

j'obtiens juste une ligne vide. Hors si je fais :
SELECT*
FROM Products
WHERE MainGrade IN ('NV')

J'obtiens tout mes produits référencés en NV dans la colonne MainGrade.

Hors moi ce que j'aimerais obtenir c'est les produits dont le nom se termine par NV ou -NV dans la colonne ProductName.
Pourquoi est-ce que mon %NV est refusé ?

merci pour votre aide
Configuration: SQL server standard edition version 8.00.194 (RTM) sous windows 2000 (server)

10 réponses

  1. bien joué Deus ! Merci pour la solution, j'avais pas pensé à LIKE et surtout à ne pas mettre de parenthèse après LIKE... merci encore !
    1. /par contre j'ai une autre question, ça ne fonctionne pas dans le cadre d'une colonne de date. J'ai une colonne qui s'appelle ModifyDate notée : 06/09/2005 16:41: par exemple

      comment puis-je faire par exemple pour selectionner tous les champs dont la date correspond à aujourd'hui ?
      j'ai essayé avec
      SELECT *
      FROM nom de la table
      WHERE ModifyDate LIKE '06/09/2005%'

      ou encore
      WHERE ModifyDate IN '06/09/2005%'

      ou encore avec les parenthèses avant et après les '

      Est-ce que c'est une requête différente pour les dates ?
      1. Re,
        Voici une solution envisageable. Pour l’exemple j’ai utilisé la DB Northwind
        USE Northwind
        SELECT * FROm Orders
        WHERE Datediff(dd, OrderDate, '07/08/1996') = 0

        Mais tu peux aussi regarder la fonction DATEPART,…
        1. oulà ! J'avoue que là tu parles un language que je ne comprends plus... je suis une newbie en SQL moi :)

          Ma table s'appelle DeliveryDtls.
          la colonne que j'aimerais avoir dans le WHERE c'est ModifyDate et la date 06/09/2005 par exemple. Par contre dans ma colonne ModifyDate, cela se présente sous la forme 06/09/2005:14:15: par exemple et moi j'aimerais sélectionner toute la journée.

          J'ai réussi à m'en tirer grâce à une autre colonne mais dans un futur très proche je vais me retrouver vite dans la mouise ;) et donc il faudrait vraiment que je comprenne comment on fait...

          ps. j'ai acheté un bouquin que je devrais reçevoir incessament sous peu : celui qui est présenté dans le menu de gauche...
          1. format(modifydate;"jjmmaaaa")=format(date;"jjmmaaaa")
            ou ent(modifydate)=date
            ou modifydate>=date and modifydate<date+1
            j'en connais d'autres plus longues
            1. modifydate>=date : pas de tri
              modifydate>=date and modifydate<date+1 : ligne vierge
              ent(modifydate)=date : erreur suivante

              [MICROSOFT][ODBC SQL Server Driver][SQL Server] 'modifydate' is not a recognized OPTIMIZER LOCK HINTS option

              il va de soi que j'ai bien mis les majuscules là où il y en avait.
              1. Alors dans ton cas précis essaies ça :

                SELECT * FROm DeliveryDtls
                WHERE Datediff(dd, ModifyDate, '06/09/2005’) = 0

                (Attention en fonction de ta configuration il se peut qu’il interprète ‘06/09/2005’ comme le 9 juin donc à toi de jouer avec ça ;)

                1. Bonjour ! T'as l'air de maîtriser la fonction LIKE alors une petite question pour toi, cadeau ^^

                  Je fais des requêtes en SQL sous ACCESS. Mon problème est à peu près le même qu'au dessus : j'ai deux tables A et B qui contiennent des objets dont l'arborescence est définie selon leur code ARBO.
                  A contient les matériels
                  B contient les pièces qui constituent les matériels

                  Je veux afficher les éléments de A qui ont des pièces dans B
                  exemple : dans A un matériel a un ARBO = 10
                  dans B toutes les pièces qui commencent par '10' constituent ce matériel (= 100 / 101 / 1000 / 100025 / etc...)

                  J'ai donc voulu faire une jointure de table du type
                  SELECT matériel, A.ARBO FROM A, B
                  WHERE B.ARBO LIKE 'A.ARBO%'

                  Erreur au niveau de la clause 'A.ARBO%'... j'ai essayé de remplacer "%" par "*", de placer des parenthèses ou des crochets... j'ai pas dû tout tester !?

                  Merci de me prévenir si tu as une petite idée ;)
                2. @kiwijinshit'aurais pas oublié un A.arbo=B.arbo ? enfin dans ce style.... il faut démontrer dans ta requete que arbo (par exemple) existe dans la table A et dans la table B... non ?! Sinon comment pourrait-il faire le lien entre la table A et la B ?
                3. @RiwalennC'est là tout le pb en fait :
                  Table A :
                  ARBO / Libellé matériel
                  10 Chaise
                  20 Canape
                  30 Voiture
                  311 Scooter

                  Table B :
                  ARBO / Libellé piece
                  102 Vis
                  103 Planche
                  200 Coussin
                  2001 Plume
                  300 Roue
                  3001 Jante
                  3002 Pneu
                  3110 Guidon

                  Voilà l'idée... lier ces tables en fonction des champs d'ARBO, c'est le seul moyen que j'ai trouvé (les tables sont ici simplifiées pour la compréhension).
                  Le soucis c'est que les ARBO ne sont pas identiques MAIS un code ARBO de B contient forcément dans ses premiers chiffres un code ARBO complet de A

                  J'espère que c'est assez clair.. ? Le principal soucis se situe bien au niveau de la jointure
                4. @kiwijinshije pense avoir compris... en gros c'est un truc comme ça que tu veux :

                  select materiel.tableA,arbo.tableA,
                  from tableA, tableB
                  where arbo.tableA like arbo.tableB and arbo.tableA like '3%'
                  order by arbo.tableA

                  le seul hic serait en fait de definir le 30% ou un autre chiffre bien entendu...
                  seulement y'a juste un problème dans notre exemple tu as 2 références commençant par 30 -> voiture et scooter... mais je ne pense pas que le soucis vienne de là...
                5. @RiwalennLa synthaxe exacte est TABLE.CHAMP ;)
                  Et je pense qu'il sera plus simple de faire les conditions de jointures en VBA que directement sous SQL... tant que je n'ai pas de champ rigoureusement commun entre les deux tables (avec longueur de ARBO variable qui plus est) il n'y a pas de solution adaptée..

                  Pour scooter j'ai corrigé, c'était une erreur de mettre 301, j'ai remplacé par 311 pour l'exemple.

                  Merci pour ton aide en tt cas ! Joyeuse semaine
              2. Grandiose Deus ! l'histoire du mois de juin m'a fait tilt et en effet tu as raison. c'est vraiment très bizarre tu dois faire une recherche style 09/07 pour obtenir la date 07/09 quoi que j'ai oublié que j'ai la version anglaise de windows 2000 donc forcement ça coulait de source...

                Merci Deus encore pour ton aide ! Ca m'enlève une épine du pied
                1. Franchement je comprend absolument rien a SQL
                  est-ce que l'on peut m'espliquer svp