我有一个包含一nvarchar(max)列的SQL Server表。我运行查询以选择此列包含字符串“ remove”的每一行。在结果中,我有几行该列中填充了一个空字符串,但我不明白为什么返回了这些值。
nvarchar(max)
我尝试进一步调查返回的空字符串值之一。我发现空字符串值可以匹配某些LIKE条件,但不能匹配其他条件。例如,它将与%remove%和匹配%x%,但将与不匹配%q%。
LIKE
%remove%
%x%
%q%
在SQL Server Management Studio的结果网格中,nvarchar字段显示为空字段(不为null)。但是,如果我将该len()函数应用于此字段,它将返回649的值。当我将结果表从SQL Server Management Studio导出到Excel时,该nvarchar(max)字段为空。
len()
假设必须有一堆空白字符填充该字段,我尝试在将“ 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
编辑:
修剪字段不会更改字符数。但是,当我确实使用子字符串选择连接输出中的最后一个字符时,返回的字符为’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
我的猜测是您的字符串中有一些控制字符。例如,如果第一个字符是换行符,则可能导致其余字符不显示。
尝试
select item_id, unicode(content) from objects where item_id = 100;
这将显示第一个字符的Unicode代码点,您可以使用以下命令看到第二个字符:
unicode(substring(item, 2, 1))
等等。