首页 > 解决方案 > 如何在字符串中查找/替换奇怪的空格

问题描述

我在我的 sql 数据库字符串中发现了一个奇怪的空格,它不能像 REPLACE(string, ' ', '') RTRIM 那样被替换,甚至无法用 string = '% %' 找到它。当使用 SELECT string INTO 时,这个空间甚至会转移到新表如果我在管理工作室中选择这个字符串并复制这似乎是正常的空间,当一切正常但不能直接从数据库做任何事情时。我还可以做些什么?它是某种错误,或者我可以为此尝试一些特殊字符吗?

标签: tsql

解决方案


首先,您必须确定角色。
您可以通过使用计数表(或 cte)和Unicode函数来做到这一点:

以下脚本将返回一个包含两列的表:一列包含一个字符,另一列是 unicode 值:

DECLARE @Str nvarchar(100) = N'This is a string containing 1 number and some words.';

with Tally(n) as
(
    SELECT TOP(LEN(@str)) ROW_NUMBER() OVER(ORDER BY @@SPID)
    FROM sys.objects a 
    --CROSS JOIN sys.objects b -- (unremark if there are not enough rows in the tally cte)
)

SELECT  SUBSTRING(@str, n, 1) As TheChar, 
        UNICODE(SUBSTRING(@str, n, 1)) As TheCode
FROM Tally
WHERE n <= LEN(@str)

您还可以在 where 子句中添加一个条件以仅包含“特殊”字符:

AND SUBSTRING(@str, n, 1) NOT LIKE '[a-zA-Z0-9]'

然后你可以使用它的unicode值替换它nchar(我在这个例子中使用了32,因为它是unicode“常规”空间:

SELECT REPLACE(@str, NCHAR(32), '|')

结果:

This|is|a|string|containing|1|number|and|some|words.

推荐阅读