--
大家好:
我把一条包含特殊字符(比如:[)的自负串插入数据库后,但是我接着查询的时候输入[作为查询条件,怎么就查询不到结果,请问应该怎么来改写?
我写的SQL语句:SelectCommand="SELECT CODE, DESCRIPTION FROM CATEGORY WHERE (CODE LIKE '%' + @Code + '%' AND DESCRIPTION LIKE '%' + @Desc + '%')"> @Desc 中可能含有特殊字符
-
-
-
-
|
发表于:2008-12-08 10:59:192楼 得分:0 |
- SQL中escape的主要用途
1.使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用: WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
2.ESCAPE 'escape_character'允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用途的字符。
- SELECT *
FROM finances
- WHERE description LIKE 'gs_' ESCAPE 'S'
GO
- 意思就是:
- 比如,我们要搜索一个字符串 "g_" ,如果直接 like "g_",那么 "_"的作用就是通配符,而不是字符,结果,我们会查到比如 "ga","gb","gc",而不是我们需要的 "g_".用 LIKE 'gs_' ESCAPE 'S' 's'表示特殊用法标志
3.create table a (name varchar(10))
go
- insert into a select '11%22'
union all select '11%33'
union all select '12%33'
go
select * from a WHERE name LIKE '%/%33' ESCAPE '/' --指定用'/'符号来说明跟在其后面的通配符字符为普能字符。(第二个%是字符不是通配符来的)
go
drop table a
结果为:
name
----------
11%33
12%33
|
|
|
|
-
-
|
发表于:2008-12-08 14:55:463楼 得分:0 |
用escpe 取出特殊的字符.
如:
SELECT content
FROM Content
WHERE content LIKE '/%%' ESCAPE '%'
查询出以'%'打头的文本内容
|
|
|
|
-
|
发表于:2008-12-08 15:01:524楼 得分:0 |
- SQL code
-
DECLARE @t TABLE(v VARCHAR(100))
INSERT @t SELECT '%asdfas'
UNION ALL SELECT 'asdf[asdf'
UNION ALL SELECT 'asdf[%asdf'
DECLARE @s VARCHAR(10)
SET @s='%'
--意外
SELECT * FROM @t WHERE v LIKE '%' + @s + '%'
/*
%asdfas
asdf[asdf
asdf[%asdf
*/
SET @s='['
--意外
SELECT * FROM @t WHERE v LIKE '%' + @s + '%'
/*
no records
*/
SET @s='[%'
--正确
SELECT * FROM @t WHERE v LIKE '%' + REPLACE(REPLACE(@s,'[','\['),'%','\%') + '%' ESCAPE('\')
/*
asdf[%asdf
*/
|
|