比较NVarchar字段在SQL Server 2008 R2中

时间:2011-06-25 13:22:54

标签: asp.net sql-server-2008-r2

我在声明为nvarchar(50)的表中有2个字段。在一些记录中,该字段具有看起来相同的值。但是,当我使用where子句field1 <> field2,运行查询时,它会发现字段不同。我尝试使用where子句ltrim(rtrim(field1)) <> ltrim(rtrimfield2)),但它仍然找到了不同之处。我很难过!

提前致谢。

3 个答案:

答案 0 :(得分:2)

当您使用来自不同语言的类似信件时,可能会发生这种情况。你不能在眼睛上识别它们,但是它们是不同的......

例如,这是所有英文字母和Ελληνικά(Ellas),有些看似相同,但不是。

o&lt;&gt; ο
Y&lt;&gt; Υ
A&lt;&gt; Α
E&lt;&gt; Ε

其他一些人虽然规模不大但却很明显 你&lt;&gt; υ
p&lt;&gt; ρ
我&lt;&gt; ι

所以这个'word'与'o'上的'wourrd'不同,但你看不到它。

ps我认为这个问题,因为你说“少数记录

答案 1 :(得分:1)

除了@Aristos所说的,它还可能是非中断空间(U + 00A0)或零宽度空间(U + 200B)等字符,未经LTRIM / RTRIM修剪。

答案 2 :(得分:0)

我遇到了同样的问题。

我的表包含名为Definition的NVARCHAR(MAX)字段。数据库中的当前字符串长度为956个字符。

代码调用数据并返回有效数据。 [事情发生]。构建update命令,它使用WHERE子句中的Definition字段。零行更新。

我拦截了查询并注意到当从where中排除了Definition时,UPDATE命令就会执行。

直接转到数据库,我运行了一个简单的SELECT定义FROM表WHERE Id = [无论id是什么]。行返回。

接下来,我从第一个结果复制了Definition,并将查询更改为WHERE Definition ='[...]',并且没有返回任何内容。

开始困惑,我改变了查询,以便内部选择通过Id获取定义,并且外部在内部选择的结果上具有IN。这会返回一行。

这使我认为当您将文本(ASCII)与NVARCHAR(UNICODE)中的值进行比较时会出现“问题”。

我仍然想要得到答案。

*请不要评论我在代码或奇怪的WHERE子句中构建查询的事实。