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 :

existence chaine dans un champ


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Par défaut existence chaine dans un champ
    Bonjour,


    je veux savoir si une chaine saisi existe dans un champ d'une table, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select test from table where champ.indexOf('111111') <> -1;
    mais cette requête ne marche pas.

    Merci de votre aide.

  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,

    L'opérateur LIKE est fait pour cela en SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM maTABLE 
    WHERE col LIKE '%111111%'
    ++

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE champ.indexOf('111111') <> -1;
    Vous noterez que ce filtre n'est pas SARGable.

    Pour être plus proche de ce vous avez écrit, on aurait pu proposer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	test
    FROM	dbo.TABLE
    WHERE	CHARINDEX('111111', maColonne) > 0
    Mais vous vous doutez bien qu'aucune statistique pour la colonne maColonne n'est collectée sur ce genre d'information.

    En revanche, l'écriture proposée par Mikedavem est meilleure, puisque des statistiques sont collectées sur les chaînes de caractères.
    Elles sont correctes si les chaînes ne dépassent pas les 80 caractères, parce que dans le cas contraire, les 40 premiers et 40 derniers caractères de la chaîne sont collectés et concaténés pour la constitution des statistiques.

    Si donc les chaînes qui sont stockées dans la colonne maColonne font majoritairement plus de 80 caractères, l'optimiseur de requêtes ne sait pas estimer combien de lignes vont correspondre au critère que vous recherchez.

    En conséquence, si vous avez besoin de plus de puissance dans vos recherches texte, pensez à l'utilisation d'index de recherche de texte intégral

    @++

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2010, 08h27
  2. Remplacer une chaine dans des champs
    Par Phiss dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/07/2008, 11h08
  3. Comment trouver une chaine dans un champ xml ?
    Par nico-pyright(c) dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/08/2007, 10h44
  4. Recherche une sous-chaine dans un champ ?
    Par nerick dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/03/2006, 13h46
  5. Recherche d'une chaine dans un champ
    Par Cyberbob002 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/01/2006, 15h21

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