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 &
Répondre
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!
Comme si cela prenait beaucoup de temps. – Malik
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
Comme prend beaucoup de temps. Toute autre option? – Malik
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%'
Comme prend beaucoup de temps. Toute autre option? – Malik
Combien de temps? Quel est le type de données de votre colonne? Quel genre de données avez-vous? – Kashif
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
Pouvez-vous poster la requête que vous utilisez? – Oded
select nom_colonne from nom_table où contient (COLUMN_NAME, 'R & D') – Malik
modifier Peut-être que le titre de votre question mentionner spécifiquement contains() – codeulike