2010-09-02 179 views
-1

需要编写SQL查询以在列中搜索特殊字符。需要搜索的文本是'R & D',但问题在于SQL Server 2005将其作为逻辑运算符。SQL查询搜索&符号&

+3

你能发表你正在使用的查询吗? – Oded 2010-09-02 07:42:01

+0

从Table_Name中选择Column_Name 其中包含(Column_Name,'R&D') – Malik 2010-09-02 08:57:54

+0

也许编辑您的问题标题以具体提及contains() – codeulike 2010-09-02 12:37:19

回答

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 + '%' 

编辑:

首先,我需要知道您是否使用参数o不是。

如果不是,我根本不理解这个问题。
其中之一将工作(带或不带等):

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

如果做参数的工作,我的上述溶液(... LIKE '%' + @tmp + '%')是我知道的唯一一个。


EDIT 2

现在我知道,数据类型为“文本”: 的问题是,你只能搜索文本与LIKE(不带“=”),你可以不索引文本列来提高速度。
不赞成使用文本数据类型,所以您应该将其更改为varchar(max)。
和varchar(max)没有文本所具有的限制:您可以使用'='进行搜索,并且可以对其进行索引。

所以这将是正确的解决方案:将其从文本更改为varchar(max),并且一切都将工作!

+0

喜欢花这么多时间。还有其他选择吗? – Malik 2010-09-02 08:52:49

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

,或者你可以用这个来代替like

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

正在花费那么多时间。还有其他选择吗? – Malik 2010-09-02 08:57:09

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

像是花了这么多时间。还有其他选择吗? – Malik 2010-09-02 08:55:18

+0

多少时间?什么是你的专栏的数据类型?你有什么样的数据? – Kashif 2010-09-02 09:09:04

+0

比较久。现在我们正在寻找替代品。如果找到,很好,而不是与之共存。列的数据类型是文本。数据是巨大的文本字符。 – Malik 2010-09-02 09:22:30