当前位置: 代码迷 >> Sql Server >> sql灵异:字符比较有关问题
  详细解决方案

sql灵异:字符比较有关问题

热度:101   发布时间:2016-04-24 09:02:21.0
sql灵异:字符比较问题
通过vb6将word文本(wordApp.ActiveDocument.Range().text,选择题答案,比如A)导入sql一表中,另一表手工录入学生答案(比如A),将两者字符进行比较判断答案正误并获得相应分值时,出现无法解决的问题:个别题目两者答案相同,可以判断出正确,并显示得分。个别题目虽然两表答案一致,但两者比较结果却不正确。不知道原因是什么,应如何解决?
注:两表答案字段类型都是varchar。
a表(此表da字段中字符由word导入)
id        da       fs
1          A        2
2          B        2
3          C        2
b表
xh        tmid         da 
1           1             A
1           2             B
1           3             C
select  b.xh as xh,tmid as tmid,(case when b.da=a.da then a.fs else 0 end) as df from
b left join a on b.tmid=a.id
查询结果
xh      tmid     df
1          1          2
1          2          0
1          3          2
第2题两表答案字符相同,但对比结果却不正确,数据已检查过没有空格,其实在导入时已筛除空格符。奇怪的是,a表中第2题的字符我用键盘重新录入便可以正确比较了,何解?会不会是word的字符有问题?
------解决思路----------------------
1、是否有其他不可见字符?
2、是否是倒角的字母B?

将a表查询结果保存到TXT文件中,用UE查看十六进制内容,看看是否包括其他内容。

------解决思路----------------------
不知道是不是字符编码的问题,如果确认无误没有空格了

根据以下语句,把那个觉得有问题的 字母,用以下方式查一下编码
SELECT UNICODE(N'A')

------解决思路----------------------
看到的不一定是真实的,我的意思就是存储空格等非可见字符,需要预处理一下.
------解决思路----------------------
.Range().text.Trim();

不知道这样可行不
------解决思路----------------------
试一试:
把从WORD中读出来的内容一个字母一个字母的判断,da这一列对应的内容,只要英文字母,其他的都不要。这样处理完后再保存到数据库中。
------解决思路----------------------
不正确的行找出来,先用datalength比较看长度是否一致,如果不一致说明有特殊字符被导入;如果一致逐字对比ASCII码
------解决思路----------------------
word很容易插个回车换行之类的东西,trim不一定消的了
  相关解决方案