我有一张表中声明了两个字段,类型为nvarchar(50)
。在其中一些记录中,这两个字段的值看起来是相同的。但是当我运行带有条件field1 <> field2
的查询时,它会发现这两个字段是不同的。我尝试使用ltrim(rtrim(field1)) <> ltrim(rtrimfield2))
作为条件语句,但它仍然找到了差异。我被难住了!
提前感谢。
我有一张表中声明了两个字段,类型为nvarchar(50)
。在其中一些记录中,这两个字段的值看起来是相同的。但是当我运行带有条件field1 <> field2
的查询时,它会发现这两个字段是不同的。我尝试使用ltrim(rtrim(field1)) <> ltrim(rtrimfield2))
作为条件语句,但它仍然找到了差异。我被难住了!
提前感谢。
LTRIM
/ RTRIM
去除空格。SELECT DISTINCT nvarcharExpr, CAST(nvarcharExpr AS varbinary) FROM…
,其中 nvarcharExpr
将是类似于 UPPER(LTRIM(RTRIM(nvarcharColumn)))
的结果。这样我就能看到“相同”值之间的差异。接下来,我将使用 REPLACE()
函数消除不可见字符和/或用正确的字符替换“假”的字母(如果有的话)。 - Andriy M我遇到了同样的问题。
我的表中包含一个名为Definition的NVARCHAR(MAX)字段。数据库中当前字符串长度为956个字符。
代码调用数据并返回有效数据。[发生了一些事情]。更新命令被构建,并在WHERE子句中使用Definition字段。零行被更新。
我拦截了查询并注意到当排除Definition时,UPDATE命令执行。
直接访问数据库后,我运行了一个简单的SELECT Definition FROM Table WHERE Id = [无论id是什么]。行被返回。
接下来,我从第一个结果中复制了Definition并修改了查询以WHERE Definition ='[...]',但没有返回任何内容。
开始感到困惑,我修改了查询,使内部选择通过Id获取定义,外部对内部选择的结果进行IN操作。那样就会返回一行。
这让我认为,“问题”出现在将文本(ASCII)与NVARCHAR(UNICODE)中的值进行比较时。
我仍在努力寻找答案。
*请不要评论我在代码中构建查询或奇怪的WHERE子句的事实。
SELECT '[' + yourColName + ']'
会怎么样??也许有一些额外的尾随特殊字符,你一开始看不到... - marc_s