需要编写SQL查询来搜索列中的特殊字符。搜索所需的文本是“R& D”,但问题是SQL Server 2005将其作为逻辑运算符。
答案 0 :(得分:1)
Select * From dbo.MyTable
Where MyColumn like '%R&D%'
或者您可以使用此代替like
:
Select * From dbo.MyTable
Where PatIndex('%R&D%', MyColumn) > 0
答案 1 :(得分: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%'
答案 2 :(得分:0)
我猜你正在使用参数,对吗? 因为如果你不使用参数,它就可以工作(参见其他答案)。
什么行不通的是这个:
declare @tmp nvarchar(20)
set @tmp = 'R&D'
select * from MyTable where MyColumn = @tmp
我发现使用参数的唯一方法是这样做:
declare @tmp nvarchar(20)
set @tmp = 'R&D'
select * from MyTable where MyColumn like '%' + @tmp + '%'
编辑:
首先,我需要知道你是否使用参数。
如果没有,我根本不明白这个问题 其中一个可以工作(有或没有LIKE):
select * from MyTable where MyColumn = 'R&D'
select * from MyTable where MyColumn like '%R&D%'
如果你做使用参数,我上面的解决方案(...比如'%'+ @tmp +'%')是我唯一知道的。
编辑2
现在我知道数据类型是“text”:
问题是您只能使用LIKE搜索文本(不能使用'='),并且您无法索引文本列以提高速度。
不推荐使用文本数据类型,因此无论如何都应将其更改为varchar(max)
varchar(max)没有文本的限制:您可以使用'='进行搜索,然后将其编入索引。
这将是正确的解决方案:将其从文本更改为varchar(max),一切都会正常工作!