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

Langage SQL Discussion :

Select where chaine contient sous-chaine


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut Select where chaine contient sous-chaine
    Bonjour

    J'ai cette requete :
    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
    ALTER PROCEDURE [dbo].[SEARCH_CANDS]
    	@LNAME nvarchar(50),
    	@FNAME nvarchar(50)
    AS
    BEGIN
     
    	SELECT CAND_ID FROM T_CANDINFOS
    	WHERE (		CAND_LNAME = @LNAME
    		OR	CAND_FNAME = @FNAME)
     
     
     
    	IF @@ERROR <> 0
    	BEGIN
    	    RETURN 0
    	END
    	ELSE
    	BEGIN
    		RETURN 1
    	END
    END
    J'aimerais remplacer les conditions = par des conditions "CAND_LNAME contient @LNAME" insensibles à la casse.

    Comment puis-je faire ?
    Merci

  2. #2
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonsoir,

    En faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE UPPER(CAND_LNAME ) LIKE '%' + UPPER(@LNAME) + '%'
    @+

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut
    Merci

    c'est ce que je cherchais.

    Je viens de voir que j'aurais pu utiliser ILIKE à la place de LIKE et UPPER, mais MSSQL n'a pas l'air de supporter ILIKE, je vais donc utiliser ta solution.

    @+
    Rémi

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut
    Bonjour

    J'ai encore une question.
    La requête fonctionne, mais pas comme je le voudrais.
    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
    ALTER PROCEDURE [dbo].[SEARCH_CANDS]
    	@LNAME nvarchar(50),
    	@FNAME nvarchar(50)
    AS
    BEGIN
     
    	SELECT CAND_ID FROM T_CANDINFOS
    	WHERE (	UPPER(CAND_LNAME) LIKE '%' + UPPER(@LNAME) + '%'
    		OR	UPPER(CAND_FNAME) LIKE '%' + UPPER(@FNAME) + '%' )
     
    	IF @@ERROR <> 0
    	BEGIN
    	    RETURN 0
    	END
    	ELSE
    	BEGIN
    		RETURN 1
    	END
    END
    La requete renvoie toutes les lignes de T_CANDINFOS si le nom (LNAME) ou le prénom (FNAME) sont égal à "" ou Null.

    ce que je voudrais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    nom   prénom     resultat voulu                             resultat actuel
    ""    ""         toutes les lignes                          toutes les lignes
    xx    ""         lignes ou nom contient xx                  toutes les lignes
    ""    xx         lignes ou prénom contient xx               toutes les lignes
    xx    xx         lignes ou nom ou prénom contiennent xx     lignes ou nom ou prénom contiennent xx
    Le problème concerne donc les lignes 2 et 3 de la table ci-dessus.
    Quelqu'un peut-il me donner un coup de main svp ?
    Je peux au besoin changer "" en null si besoin (en fait je l'ai déjà fait, mais ça ne change rien)

    Merci d'avance
    Rémi

  5. #5
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonjour,

    Essayez de séparer les différents cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WHERE 
    -- tous.
    (@LNAME = '' AND @FNAME = '') 
    OR 
    -- filtre effectif sur nom ou prénom.
    (
    (UPPER(CAND_LNAME) LIKE '%' + UPPER(@LNAME) + '%' AND @LNAME <> '')
    OR	
    (UPPER(CAND_FNAME) LIKE '%' + UPPER(@FNAME) + '%' AND @FNAME <> '')
    )
    @+

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut
    Yes
    Merci de m'avoir mis sur la bonne voie.

    Voici ce qui fonctionne (à noter que je n'ai jamais le prénom sans le nom)
    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
    ALTER PROCEDURE [dbo].[SEARCH_CANDS]
    	@LNAME nvarchar(50),
    	@FNAME nvarchar(50)
    AS
    BEGIN
     
    	SELECT CAND_ID FROM T_CANDINFOS
    	WHERE 
    		(@LNAME = '' AND @FNAME = '') OR
    		((UPPER(CAND_LNAME) LIKE '%' + UPPER(@LNAME) + '%') AND @FNAME = '') OR
    		((UPPER(CAND_LNAME) LIKE '%' + UPPER(@LNAME) + '%') OR
    			(UPPER(CAND_FNAME) LIKE '%' + UPPER(@FNAME) + '%'))
    			AND @FNAME != ''
     
    	IF @@ERROR <> 0
    	BEGIN
    	    RETURN 0
    	END
    	ELSE
    	BEGIN
    		RETURN 1
    	END
    END
    @+

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

Discussions similaires

  1. [RegEx] Savoir si une chaine contient sous-chaine
    Par astrolane dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2009, 16h53
  2. Variable contient sous chaine
    Par Carlito_superheros dans le forum Linux
    Réponses: 5
    Dernier message: 14/02/2006, 19h09
  3. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  4. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39
  5. Extraction de sous-chaine dans une chaine
    Par ma2th dans le forum C
    Réponses: 7
    Dernier message: 07/05/2004, 12h42

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