如何在字符串中查找/替换奇怪的空格

时间:2019-05-06 08:23:36

标签: tsql

我在我的sql数据库中发现了无法替换的奇怪的空白字符串,例如REPLACE(string,'','')RTRIM,甚至找不到string ='%%'。使用SELECT字符串INTO时,该空间甚至被转移到新表中 如果我在managment studio中选择此字符串并进行复制,这似乎是正常空间,并且一切正常但无法直接从数据库中执行任何操作。我还可以做些什么?是某种错误,还是我可以为此尝试一些特殊字符?

1 个答案:

答案 0 :(得分:1)

首先,您必须识别字符。
您可以通过使用理货表格(或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]'

然后,您可以使用nchar使用它的unicode值替换它(在此示例中,我使用了32,因为它是unicode“常规”空格:

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

结果:

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