2010-09-02 8 views
-1

Besoin d'écrire une requête SQL pour rechercher un caractère spécial dans une colonne. Le texte à rechercher est 'R & D' mais le problème est que SQL Server 2005 le prend comme un opérateur logique.Requête SQL search ampersand &

+3

Pouvez-vous poster la requête que vous utilisez? – Oded

+0

select nom_colonne from nom_table où contient (COLUMN_NAME, 'R & D') – Malik

+0

modifier Peut-être que le titre de votre question mentionner spécifiquement contains() – codeulike

Répondre

0

Je suppose que vous utilisez des paramètres, correct? Parce que si vous n'utilisez PAS de paramètres, cela fonctionne (voir les autres réponses).

Ce qui ne fonctionne pas est ceci:

declare @tmp nvarchar(20) 
set @tmp = 'R&D' 

select * from MyTable where MyColumn = @tmp 

La seule façon que je trouve pour le faire fonctionner avec des paramètres fait comme ceci:

declare @tmp nvarchar(20) 
set @tmp = 'R&D' 

select * from MyTable where MyColumn like '%' + @tmp + '%' 

EDIT:

tout d'abord, je dois savoir si vous utilisez des paramètres o r pas.

Sinon, je ne comprends pas le problème du tout.
L'un d'entre eux va travailler (avec ou sans ETC.):

select * from MyTable where MyColumn = 'R&D' 
select * from MyTable where MyColumn like '%R&D%' 

Si vous faites travail avec des paramètres, ma solution ci-dessus (... comme '%' + @tmp + '%') est le seul que je connaisse.


EDIT 2

Maintenant que je sais que le type de données est « texte »: Le problème est que vous ne pouvez rechercher du texte avec LIKE (pas avec « = ») et vous pouvez Ne pas indexer une colonne de texte pour augmenter la vitesse.
Le type de données de texte est obsolète, donc vous devriez quand même le changer en varchar (max).
Et varchar (max) n'a pas les limitations que le texte a: vous pouvez le rechercher avec '=' et vous pouvez l'indexer.

Donc ce serait la bonne solution: changer de texte varchar (max) et tout fonctionne!

+0

Comme si cela prenait beaucoup de temps. – Malik

1
Select * From dbo.MyTable 
Where MyColumn like '%R&D%' 

ou vous pouvez utiliser au lieu de like:

Select * From dbo.MyTable 
Where PatIndex('%R&D%', MyColumn) > 0 
+0

Comme prend beaucoup de temps. Toute autre option? – Malik

0
declare @tbl table 
(
    textcol varchar(50) 
) 

insert into @tbl select 'R&D' 
insert into @tbl select 'What is R&D' 
insert into @tbl select 'SometextR&DAndsometext' 
insert into @tbl select 'This Row will not return' 

select * from @tbl where textcol like '%R&D%' 
+0

Comme prend beaucoup de temps. Toute autre option? – Malik

+0

Combien de temps? Quel est le type de données de votre colonne? Quel genre de données avez-vous? – Kashif

+0

Comparativement long. En ce moment nous cherchons des alternatives. Si trouvé, super, non, vis avec. Le type de colonne est du texte. Les données sont un gros morceau de texte. – Malik