我有一个包含nvarchar(max)列的SQL Server表。我运行了一个查询来选择此列包含字符串'remove'的每一行。在结果中,我有几行,其中这一列填充了一个空字符串,我不明白为什么返回这些值。
我尝试进一步调查,返回一个空字符串值。我发现空字符串值将匹配某些LIKE条件,但不匹配其他条件。例如,它将匹配'%remove%'和'%x%',但它与'%q%'不匹配。
在SQL Server Management Studio的结果网格中,nvarchar字段显示为空字段(不为空)。但是,如果我将len()函数应用于此字段,它将返回值649.当我将结果表从SQL Server Management Studio导出到Excel时,nvarchar(max)字段为空。
假设必须有一堆空白字符填充字段,我尝试在将'x'连接到返回值的任一端之后选择字段。在结果中,前导'x'出现在字符串的开头,但不会显示连接到结尾的'x'。
我对发生的事情感到很困惑。我可以根据要求提供更多信息。
select itemid, content
from objects
where itemid = 100 and content like '%remove%'
----------------
itemid | content
100 |
select itemid, 'x' + content + 'x' as 'content'
from objects
where itemid = 100 and content like '%remove%'
----------------
itemid | content
100 | x
编辑:
修剪字段不会更改字符数。但是,当我使用substring来选择连接输出中的最后一个字符时,返回的字符是'x',这表明由于字符串的长度,它在GUI输出中是不可见的。在将内容导出到Excel时,我仍然看不到这个尾随的'x'字符。我认为nvarchar变量中可能存在不支持的字符。
select itemid, 'x' + ltrim(rtrim(content)) + 'x' as 'content'
from objects
where itemid = 100 and content like '%remove%'
----------------
itemid | content
100 | x
答案 0 :(得分:1)
我想,你应该修剪一下这个栏目;
$type: 2
答案 1 :(得分:1)
我的猜测是你在字符串中有一些控制字符。例如,如果第一个字符是换行符,则可能导致其余字符不显示。
尝试
select item_id, unicode(content)
from objects
where item_id = 100;
这将显示第一个字符的unicode代码点,您可以看到第二个字符:
unicode(substring(item, 2, 1))
等等。