2010-09-14 79 views
3

我的一個SQL查詢正在返回數據中的不可打印字符,因爲我在報告中出現錯誤。請讓我知道如何檢查一個字符串在T-SQL中是否具有不可打印的字符,以便我可以找到這些行並修復數據?提前致謝。sql在字符串中查找不可打印的字符

+0

你知不知道它是同一個非打印字符? – gbn 2010-09-14 17:19:25

回答

0

我發現某些列的字符CHAR(0)導致了這個問題。我用null替換了它們,它工作。

1

Found此:

WITH Num1 (n) AS (SELECT 1 UNION ALL SELECT 1), 
Num2 (n) AS (SELECT 1 FROM Num1 AS X, Num1 AS Y), 
Num3 (n) AS (SELECT 1 FROM Num2 AS X, Num2 AS Y), 
Num4 (n) AS (SELECT 1 FROM Num3 AS X, Num3 AS Y), 
Nums (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY n) FROM Num4), 
UpdateCTE 
AS 
(SELECT keycol, DesNM, 
(SELECT CASE WHEN ASCII(SUBSTRING(DesNM, n, 1)) 
BETWEEN 0x00 AND 0x1F 
THEN '' 
ELSE SUBSTRING(DesNM, n, 1) 
END + '' 
FROM I2DE AS B 
JOIN Nums 
ON n <= LEN(DesNM) 
WHERE B.keycol = A.keycol 
FOR XML PATH('')) AS DesNM_clean 
FROM I2DE AS A) 
UPDATE UpdateCTE 
SET DesNM = DesNM_clean; 

有幾個零件給它,一個是產生與在飛行號碼 一個表(使用NumX CTE的),則該列切片個別 字符,檢查它是否在範圍內,然後跳過它, 最終使用FOR XML PATH連接回單個值。

+0

感謝您的回覆 – RKP 2010-11-19 18:35:35

2

當你不知道哪個非打印字符原因造成的問題,但你已經確定了記錄:

  1. 運行查詢Management Studio中複製有問題的單一已知領域從電網
  2. 領域粘貼到一個十六進制編輯器(粘貼到文本部分),所以你可以看到的字符
  3. 查找的十六進制字符在打擊問題一個ASCII表,如果需要的話

現在,你可以做一個更新更換擦洗你的數據,或者簡單地執行查詢本身的清理,因爲現在你知道什麼是造成問題的原因。