2010-07-19 7 views
5

Je ne peux pas obtenir l'instruction similaire à travailler avec espace et caractère générique de fin. Ma requête est la suivante:tsql utilisant comme avec wildcard et espace de fuite?

select * from Table where Field like 'Desc_%'

Les données sont l'espace délimité par exemple, Desc Haut, Bas Desc et ainsi de suite. La requête fonctionne lorsque j'utilise le modèle 'Desc_%' mais pas lorsque j'utilise le modèle 'Desc%'. Le champ est nvarchar (255).

Des idées?

EDIT

Transforme les données était délimité par des tabulations et quand je copiais une valeur du Management Studio 2008, converti l'onglet à l'espace. Erreur muette. J'ai fait comme le [] pourboire donc je l'ai marqué la réponse. Merci à tous, je me souviens de ne pas faire confiance à la copie des résultats de la grille.

+0

Y a-t-il une raison spécifique pour laquelle "like 'Desc%'" ne fonctionnera pas? – AllenG

+0

@AllenG - "LIKE Desc%" ne se limitera pas à "Desc" (Desc-blanc), il va ramasser tout ce qui commence par "Desc" – DaveE

+0

@DaveE - oui, il le fera, mais si les seules choses qui pourrait être dans sa colonne sont 'Desc Top', 'Desc Bottom', 'Desc InsideOut', etc, et jamais 'Descendant de Charlemaine', il n'y a pas de blocage pratique à l'utilisation de Like Desc%. Si sa table contient ces autres valeurs, bien sûr, il aura un problème. – AllenG

Répondre

3

Utilisez les crochets ['&'] 'pour définir une classe à un seul caractère à faire correspondre. Dans votre cas, le SQL devrait ressembler à ceci: "select * from table où le champ comme 'Desc []%'"

EDIT: exemple ajouter, lien

CREATE TABLE #findtest (mytext varchar(200)) 

insert #findtest VALUES ('Desc r') 
insert #findtest VALUES ('Descr') 

select * from #findtest where mytext like 'Desc[ ]%' 

DROP TABLE #findtest 

(1 row(s) affected) 

(1 row(s) affected) 
mytext 
-------- 
Desc r 

(1 row(s) affected) 

Voir this article.

+0

Merci pour le conseil. Cela marche. Je suis désolé de vous avoir fait perdre du temps. Les données avaient un onglet pas un espace. J'ai copié la valeur à partir de la grille de Management Studio et j'ai converti la tabulation en espace. – Steve

0

Étant donné qu'un caractère de soulignement est un caractère générique d'un seul caractère et que le caractère générique est un caractère à plusieurs caractères, ils sont identiques ("%" et "_%"). C'est comme si vous demandiez deux caractères génériques consécutifs. Je ne sais pas si je comprends votre question, mais je ne suis pas surpris qu'il ne se comporte pas comme prévu. Vous voulez indiquer explicitement que vous voulez un espace, en utilisant sa valeur ASCII?

0

SELECT * FROM Table WHERE Field Like 'Desc' + CHAR(32) + '%'