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

在有数字有汉字的字段中含有查询不正确的问题
有字段内容类似如下
1调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 [总部客服-荆福武->总部客服- 陶静]
2调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 档案类型: [原] 小档案 [现] 大档案

用如下结果正确SELECT *
FROM dbo.ModInfo
WHERE (CHARINDEX('3150603', ModFields) > 0)
而将查询内容换成汉字则无正确结果
SELECT *
FROM dbo.ModInfo
WHERE (CHARINDEX('档案类型', ModFields) > 0)

同时如用like也是同样不能正确执行
请教应如何才能让查询含有'档案类型'的结果正确


------解决方案--------------------
前面加个N试试
SELECT *
FROM dbo.ModInfo
WHERE (CHARINDEX(N'档案类型', ModFields) > 0)
------解决方案--------------------
楼主数据库是什么版本?
我在MSSQL2008R2,测试代码如下:
create table t1
(
col varchar(2000)
)
insert into t1
select '1调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 [总部客服-荆福武->总部客服- 陶静]' union all
select '2调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 档案类型: [原] 小档案 [现] 大档案'

select * from t1 where CHARINDEX('档案类型', col) > 0

--------------------------------
col
2调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 档案类型: [原] 小档案 [现] 大档案
------解决方案--------------------
SQL code

create table #t1
(
    col varchar(max)
)
insert into #t1
select '1调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 [总部客服-荆福武->总部客服- 陶静]' 
union all
select '2调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 档案类型: [原] 小档案 [现] 大档案'

select * from #t1 where charindex('档案类型',col)>0

select * from #t1 where charindex(N'档案类型',col)>0

结果:
col
-------------------------------------------------2调整:0.001.003.012->0.001.003.015 3110512310008->3120512310008 档案类型: [原] 小档案 [现] 大档案

(1 行受影响)