繁体   English   中英

识别隐藏字符

[英]Identify Hidden Characters

在我的 SQL 表中,我的文本具有隐藏字符,只有在我将其复制并粘贴到记事本 ++ 时才可见。

如何使用 SQL 服务器查询找到那些具有隐藏字符的行?

我尝试使用datalengthlen比较长度,但它不起作用。

DATALENGTH(name) AS BinaryLength != LEN(name)

我想要有隐藏字符的行。

假设这是由控制字符引起的。 其中一些是不可见的。 但也包括制表符、换行符和空格。 一个示例来说明以及如何让它们出现。

--DROP TABLE #SillyTemp

DECLARE @InvisibleChar1 NCHAR(1) = NCHAR(28), @InvisibleChar2 NCHAR(1) = NCHAR(30), @NonControlChar NCHAR(1) = NCHAR(33);
DECLARE @InputString NVARCHAR(500) = N'Some |' + @InvisibleChar1 +'| random string |' + @InvisibleChar2 + '|' + '; Thank god Finally a normal character |' + @NonControlChar + '|'; 
SELECT @InputString AS OhNoInvisibleCharacters

DECLARE @ControlCharRange NVARCHAR(50) = N'%[' + NCHAR(1) + '-' + NCHAR(31) + ']%';

CREATE TABLE #SillyTemp
(
    input nvarchar(500)
)

INSERT INTO #SillyTemp(input)
VALUES (@InputString),(N'A normal string')

SELECT @ControlCharRange;
SELECT input FROM #SillyTemp AS #SI WHERE input LIKE @ControlCharRange;

这会产生 3 个结果。 一个带有 invisiblechars 的字符串,如下所示:

一些|| 随机字符串 ||; 感谢上帝终于有一个正常的字符了|!|

请注意,在 SQL 内部实际上是不可见的。 但是stackoverflow这样显示它们。 SQL服务器中的output很简单。

一些|| 随机字符串 ||; 感谢上帝终于有一个正常的字符了|!|

但是这些字符仍然有一个对应的 (N)CHAR(X) 值。 (N)CHAR(0) 是一个 NULL 字符,极不可能出现在字符串中,在我检测它们的设置中,它也为构建范围提供了一些问题。 (N)CHAR(32) 是 ' ' 空格字符。

[XY] 字符串运算符的工作方式也基于 (N)CHAR 数字。 因此我们可以设定 [NCHAR(1)-NCHAR(31)] 的范围

最后一个 select 通过临时表,其中包含不可见字符。 由于我们正在寻找 1 到 31 之间的任何 NCHARS,因此只有那些具有不可见字符(通常是无效字符或制表符/换行符)的 NCHARS 满足 where 条件。 因此只有他们被退回。 在这种情况下,我的 select 语句中只返回“故障”字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM