与SQL

时间:2017-12-08 13:50:07

标签: sql sql-server sql-like

我有一个包含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

2 个答案:

答案 0 :(得分:1)

我想,你应该修剪一下这个栏目;

$type: 2

答案 1 :(得分:1)

我的猜测是你在字符串中有一些控制字符。例如,如果第一个字符是换行符,则可能导致其余字符不显示。

尝试

select item_id, unicode(content) 
from objects
where item_id = 100;

这将显示第一个字符的unicode代码点,您可以看到第二个字符:

unicode(substring(item, 2, 1))

等等。