我有一个包含 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
最佳答案
我的猜测是您在字符串中有一些控制字符。例如,如果第一个字符是换行符,则可能导致不显示其余字符。
尝试
select item_id, unicode(content)
from objects
where item_id = 100;
这将显示您可以看到第二个字符的第一个字符的 unicode 代码点:
unicode(substring(item, 2, 1))
等等。
关于sql - SQL 中与 LIKE 条件匹配的空字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47715714/