sql, чтобы найти непечатаемые символы в строке - PullRequest
3 голосов
/ 14 сентября 2010

один из моих SQL-запросов возвращает непечатные символы в данных, из-за которых в отчете появляется ошибка.Пожалуйста, дайте мне знать, как я могу проверить, содержит ли строка непечатаемые символы в T-SQL, чтобы я мог найти эти строки и исправить данные?Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 07 июля 2014

Когда вы не знаете, какой непечатаемый символ вызывает проблему, но вы определили запись:

  1. Запустите запрос в Management Studio ископируйте единственное известное поле с проблемами из сетки
  2. Вставьте поле в шестнадцатеричный редактор (вставьте в текстовую часть), чтобы вы могли видеть шестнадцатеричные символы
  3. Поиск соответствующих символов по диаграмме ASCII, если необходимо

Теперь вы можете либо обновить с помощью заменить для очисткиваши данные, или просто выполните очистку в самом запросе, потому что теперь вы знаете, что является причиной проблемы.

1 голос
/ 14 сентября 2010

Найдено это:

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 голосов
/ 19 ноября 2010

Я обнаружил, что некоторые столбцы имели символ CHAR (0), который вызывал эту проблему. Я заменил их на ноль, и это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...