簡體   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