日期:2014-05-18  浏览次数:20460 次

SqlServer 查询遇到特殊字符 '?',无法查询到记录
查询语句如下 where ID = '2?**'
只要条件字符中包含? 字符,就查询不到结果。

------解决方案--------------------
try
SQL code

where ID = N'2?**'

------解决方案--------------------
where id = N'2?**'
------解决方案--------------------
9楼的测试根本就不对。

首先,?这个字符,不被中文字符集所支持, 所以在中文操作系统上安装的sqlserver如果用默认排序规则chinese_rpc...,且用text,char,varchar之类数据类型,那么写入?这个字符时,写入就是乱码。

9楼自己可以试一下,
SELECT * FROM TBTEST WHERE CHARINDEX('?',ID)>0
是不是跟你上面那句查到的结果一样?


楼主要想查到正确的结果, 做法无非两种:

1,存储数据时,不考滤排序规则,但用unicode方式编码,即字段用nvarchar,nchar,ntext之类,赋值时加N前辍,比如:
SQL code
CREATE TABLE TBTEST(ID NVARCHAR(10))
INSERT TBTEST VALUES(N'AFD2?**')
INSERT TBTEST VALUES(N'2FD?**')
INSERT TBTEST VALUES(N'FDRE2?**')
INSERT TBTEST VALUES(N'2?FD**')
INSERT TBTEST VALUES(N'2?**FD')
INSERT TBTEST VALUES(N'2?*FD*')
INSERT TBTEST VALUES(N'24546564**')

SELECT * FROM TBTEST WHERE CHARINDEX(N'?',ID)>0

/*
AFD2?**
2FD?**
FDRE2?**
2?FD**
2?**FD
2?*FD*

*/

DROP TABLE TBTEST