如何解决在SQL Server 2008 R2中比较NVarchar字段
| 我在声明为nvarchar(50)
的表中有2个字段。在一些记录中,该字段具有看起来相同的值。但是,当我使用where子句“ 1”运行查询时,会发现字段是不同的。我尝试使用where子句ltrim(rtrim(field1)) <> ltrim(rtrimfield2))
,但仍然发现有区别。我很沮丧!
提前致谢。
解决方法
当您使用不同语言的相似字母时,可能会发生这种情况。您无法在眼睛上认出它们,但有所不同...
例如,这是英文和Ελληνικά(Ellas)中的所有字母,有些看起来相同,但不同。
o <>ο
Y <>Υ
A <>Α
E <>Ε
其他一些虽然很小但明显不同
u <>υ
p <>ρ
我<>ι
因此,这个\'word \'与\'o \'上的\'w \ rd \'是不同的,但是您看不到它。
ps我认为是这个问题,因为您说“记录很少”
, 除了@Aristos所说的以外,还可能是不间断空格(U + 00A0)或零宽度空格(U + 200B)之类的字符,这些字符未用by3ѭ/
RTRIM
修饰。
, 我遇到了同样的问题。
我的表包含一个称为Definition的NVARCHAR(MAX)字段。数据库中的当前字符串长度为956个字符。
代码调用数据,并返回有效数据。 [东西发生]。生成了update命令,它使用WHERE子句中的Definition字段。零行被更新。
我拦截了该查询,并注意到当“定义”从“位置”中排除时,将执行UPDATE命令。
直接进入数据库,我从表WHERE Id = [无论ID是什么]中运行了一个简单的SELECT定义。返回行。
接下来,我从第一个结果中复制了Definition,并将查询更改为WHERE Definition = \'[...] \',但未返回任何内容。
开始感到困惑,我更改了查询,以便内部选择通过ID获得定义,而外部选择在内部选择的结果上具有IN。返回一行。
这使我认为,当您将文本(ASCII)与NVARCHAR(UNICODE)中的值进行比较时,就会出现“问题”。
我仍在设法得到答案。
*请不要对我在代码或奇怪的WHERE子句中构建查询的事实发表评论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。