sql中字符串内的单引号
我有以下SQL查询用于搜索目的 有一个sql中字符串内的单引号,sql,sql-server-2008,tsql,sql-server-2012,sql-like,Sql,Sql Server 2008,Tsql,Sql Server 2012,Sql Like,我有以下SQL查询用于搜索目的 有一个@st变量,它被分配了一个SQL查询,最后我将执行查询。问题是@st变量被分配了一个字符串(即查询),并且在字符串中有LIKE表达式,例如: address like '%edmon%' 因此,它变成: set @st='select * from infoone where address like '%edmon%'' 它导致了一个错误: edmon附近的语法不正确 完整的查询如下: declare @v int; declare @st varch
@st
变量,它被分配了一个SQL查询,最后我将执行查询。问题是@st
变量被分配了一个字符串(即查询),并且在字符串中有LIKE
表达式,例如:
address like '%edmon%'
因此,它变成:
set @st='select * from infoone where address like '%edmon%''
它导致了一个错误:
edmon附近的语法不正确
完整的查询如下:
declare @v int;
declare @st varchar(1000);
set @st = 'select PLACEID, LEFT(CONVERT(NVARCHAR(1000), description), 500) as
des1, LOCATIONCITY, ADDRESS, DateT, RENT from infoone where ';
Select @v = count(address)
from infoone
where ((address like '%main%') OR (address like '%main street%')
OR (address like '%main street edmonton%'));
if @v>0
begin
set @st = @st + '(address like '%main%') OR
(address like '%main street%') OR
(address like '%main street edmonton%')' +
'and (';
end
else begin
execute(@st)
请让我知道我做错了什么以及如何解决它
谢谢要获取字符串的单引号,请使用
'
:
要获取字符串上的单引号,请使用
'
:
Gordon Linoff已经向您解释了单引号的错误所在”,但您的声明也存在一些其他问题。做你想做的事情的更好的方法是这样的
declare @st nvarchar(MAX);
set @st=N' select PLACEID
,CONVERT(NVARCHAR(500),[description]) as des1
,LOCATIONCITY
,[ADDRESS]
,DateT
,RENT
from infoone where 1 = 1 ';
IF EXISTS (Select * from infoone
where(([ADDRESS] like '%main%')
OR ([ADDRESS] like '%main street%')
OR ([ADDRESS] like '%main street edmonton%')))
begin
set @st = @st+ N' AND (
([ADDRESS] like ''%main%'')
OR
([ADDRESS] like ''%main street%'')
OR
([ADDRESS] like ''%main street edmonton%'')
)';
end
else
begin
set @st = @st+ N' AND (Some Other Condition) )'
end
EXECUTE sp_executesql @st
Gordon Linoff已经向您解释了单引号的错误所在”,但您的声明也存在一些其他问题。做你想做的事情的更好的方法是这样的
declare @st nvarchar(MAX);
set @st=N' select PLACEID
,CONVERT(NVARCHAR(500),[description]) as des1
,LOCATIONCITY
,[ADDRESS]
,DateT
,RENT
from infoone where 1 = 1 ';
IF EXISTS (Select * from infoone
where(([ADDRESS] like '%main%')
OR ([ADDRESS] like '%main street%')
OR ([ADDRESS] like '%main street edmonton%')))
begin
set @st = @st+ N' AND (
([ADDRESS] like ''%main%'')
OR
([ADDRESS] like ''%main street%'')
OR
([ADDRESS] like ''%main street edmonton%'')
)';
end
else
begin
set @st = @st+ N' AND (Some Other Condition) )'
end
EXECUTE sp_executesql @st
我同意“存在”比“计数”好,但我并不觉得这一步是必要的。事实上,这似乎有点令人困惑——如果表中有一个包含main的地址,那么添加这个where子句并将其限制在这些行中,否则返回所有内容?此外,三个OR是冗余的。如果有任何东西与%main%匹配,那么它们也将与%main street%和%main street edmonton%匹配。我同意EXISTS比COUNT好,但我并不觉得这一步是必要的。事实上,这似乎有点令人困惑——如果表中有一个包含main的地址,那么添加这个where子句并将其限制在这些行中,否则返回所有内容?此外,三个OR是冗余的。如果任何东西匹配%main%,那么它们也将匹配%main street%和%main street edmonton%。任何匹配
的东西,比如“%main%”
也将匹配比如“%main street%”
和比如“%main street edmonton%”
-那么为什么不直接说比如“%main%”呢,获得一个计数是一个糟糕的想法——这意味着SQL Server必须对所有匹配的行进行计数。因为您只关心是否至少有一行,所以use存在于M.Ali的答案中。任何匹配的东西,如“%main%”
也将匹配如“%main street%”
和如“%main street edmonton%”
-那么为什么不直接说如“%main%”
,获得一个计数是一个糟糕的想法——这意味着SQL Server必须对所有匹配的行进行计数。因为您只关心是否至少有一行,所以使用存在于M.Ali的答案中。