小编典典

空字符串变量与SQL中的LIKE条件匹配

sql

我有一个包含一nvarchar(max)列的SQL Server表。我运行查询以选择此列包含字符串“
remove”的每一行。在结果中,我有几行该列中填充了一个空字符串,但我不明白为什么返回了这些值。

我尝试进一步调查返回的空字符串值之一。我发现空字符串值可以匹配某些LIKE条件,但不能匹配其他条件。例如,它将与%remove%和匹配%x%,但将与不匹配%q%

在SQL Server Management
Studio的结果网格中,nvarchar字段显示为空字段(不为null)。但是,如果我将该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

编辑:

修剪字段不会更改字符数。但是,当我确实使用子字符串选择连接输出中的最后一个字符时,返回的字符为’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

阅读 264

收藏
2021-04-14

共1个答案

小编典典

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

尝试

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

这将显示第一个字符的Unicode代码点,您可以使用以下命令看到第二个字符:

unicode(substring(item, 2, 1))

等等。

2021-04-14