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

MS SQL Server Discussion :

Recherche floue


Sujet :

MS SQL Server

  1. #1
    Candidat au Club Avatar de lyvinlyfe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Recherche floue
    Bonjour à tous,

    Dans la même problématique évoquée ici, je n'arrive pas à expliquer ceci :

    SELECT tnc_itm_id, tnc_itm_references FROM dbo.tb_ndx_commandes WHERE tnc_itm_references LIKE '%1660303%'... me retourne :

    tnc_itm_id tnc_itm_references
    3636088 16602571660303
    4279653 16602571660303
    4279713 16602571660303
    4565836 1660257estremplacepar1660303
    4566816 1660257estremplacepar1660303
    4589858 16602571660303
    4621821 16602571660303

    Par contre, ceci ne me retourne rien ... je m'arrache la tête en essayant un peu tout mais ... rien :
    • SELECT * FROM dbo.tb_ndx_commandes WHERE CONTAINS(tnc_itm_references, '1660303')
    • SELECT * FROM dbo.tb_ndx_commandes WHERE CONTAINS(tnc_itm_references, '%1660303%')
    • SELECT * FROM dbo.tb_ndx_commandes WHERE CONTAINS(tnc_itm_references, ' "*1660303*" ')
    • SELECT * FROM dbo.tb_ndx_commandes WHERE CONTAINS(tnc_itm_references, '"1660303"')


    Quelle syntaxe me permettrait de remonter les mêmes résultats ?

    Merci d'avance pour votre aide ...

  2. #2
    Membre expérimenté Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 533
    Points : 1 563
    Points
    1 563
    Par défaut
    Citation Envoyé par lyvinlyfe Voir le message
    Quelle syntaxe me permettrait de remonter les mêmes résultats ?
    Vous n'avez pas compris l'intérêt de CONTAINS qui travaille sur des mots ou expressions, or 1660303 n'est pas un mot.
    https://learn.microsoft.com/fr-fr/sq...l-server-ver16

    Dans votre cas, il n'y pas d'intérêt à substituer LIKE par CONTAINS.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 938
    Points : 51 773
    Points
    51 773
    Billets dans le blog
    6
    Par défaut
    Dans un tel cas, j'aurais ajouté une colonne calculée persistante indexée pour faire ma requête dessus. Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE dbo.tb_ndx_commandes
       ADD tnc_itm_references_SUFFIX7 AS 
          CASE WHEN LEN(tnc_itm_references) >= 7 
                  THEN RIGHT(tnc_itm_references , 7) 
          END PERSISTED;
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX X007 ON dbo.tb_ndx_commandes(tnc_itm_references_SUFFIX7);
    GO
    Récriture requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM   dbo.tb_tnc_itm_references_SUFFIX7 = '1660303';
    A +

  4. #4
    Candidat au Club Avatar de lyvinlyfe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par AaâÂäÄàAaâÂäÄàAaâÂäÄ Voir le message
    Vous n'avez pas compris l'intérêt de CONTAINS qui travaille sur des mots ou expressions, or 1660303 n'est pas un mot.
    https://learn.microsoft.com/fr-fr/sq...l-server-ver16

    Dans votre cas, il n'y pas d'intérêt à substituer LIKE par CONTAINS.

    L'article est intéressant, merci !

  5. #5
    Candidat au Club Avatar de lyvinlyfe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Dans un tel cas, j'aurais ajouté une colonne calculée persistante indexée pour faire ma requête dessus. Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE dbo.tb_ndx_commandes
       ADD tnc_itm_references_SUFFIX7 AS 
          CASE WHEN LEN(tnc_itm_references) >= 7 
                  THEN RIGHT(tnc_itm_references , 7) 
          END PERSISTED;
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE INDEX X007 ON dbo.tb_ndx_commandes(tnc_itm_references_SUFFIX7);
    GO
    Récriture requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM   dbo.tb_tnc_itm_references_SUFFIX7 = '1660303';
    A +

    Je comprends l'idée, c'est intéressant. Merci pour le temps passé, je vais réadapter tout ca.
    Je n'arrive par contre pas à comprendre, d'après vos indications, pourquoi un CONTAINS(dbo.tb_tnc_itm_references, '1002') va me renvoyer "1002<blabla>" mais aussi "001002<blabla>" par exemple.

  6. #6
    Membre expérimenté Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 533
    Points : 1 563
    Points
    1 563
    Par défaut
    Citation Envoyé par lyvinlyfe Voir le message
    L'article est intéressant, merci !
    Mettons que c'est la doc officiel, le premier document que tu vas consulter quand tu as des problèmes avec une fonction

    Merci escartefigue pour la correction.

Discussions similaires

  1. [SOLR] Recherche FullText avec ordre mais recherche floue pour chaque mot
    Par artiom dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 0
    Dernier message: 02/02/2015, 13h32
  2. Recherche floue en texte intégral, sauce LIKE
    Par elsuket dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 14/03/2011, 14h02
  3. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 23h18
  4. Recherche de documentation complète en algorithmes
    Par Anonymous dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/03/2002, 13h09

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