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

标签 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

最佳答案

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

尝试

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/

相关文章:

mysql - 在sql中比较同一个表中的两列时如何选择

c# - 在一个 Linq to Entities 查询中多次实现 "like"运算符

MySQL - 是否可以对表中的所有列使用 LIKE?

SQL;只计算每列中指定的值

SQL Server 临时表

c# - linq to entity sqlFunction.string 转换返回 varchar 而不是 nvarchar

php - 在将值存储为 CSV 的列上使用多个标签进行最佳结果搜索

python - Django:ImageField 需要文件路径还是实际的图像对象?

mysql - 将 SQL ALL 函数与 HAVING COUNT(*) >= 混淆

sql - 使用Spark DataFrame groupby时如何获取其他列?