В этой статье блога мы рассмотрим различные методы удаления небуквенно-цифровых символов из строки с помощью T-SQL. При работе с текстовыми данными в SQL Server часто необходимо очистить и нормализовать данные, удалив специальные символы или символы. Используя различные методы, вы можете эффективно выполнить задачу очистки данных.
Метод 1: использование PATINDEX и цикла WHILE
DECLARE @InputString VARCHAR(100) = 'ab!@#$cd123!@#';
WHILE PATINDEX('%[^a-zA-Z0-9]%', @InputString) > 0
SET @InputString = STUFF(@InputString, PATINDEX('%[^a-zA-Z0-9]%', @InputString), 1, '');
SELECT @InputString AS CleanedString;
Объяснение: Этот метод использует функцию PATINDEX для поиска позиции первого небуквенно-цифрового символа в строке. Затем он использует функцию STUFF для замены этого символа пустой строкой. Цикл продолжается до тех пор, пока не будут удалены все небуквенно-цифровые символы.
Метод 2: использование рекурсивного CTE
DECLARE @InputString VARCHAR(100) = 'ab!@#$cd123!@#';
WITH CTE AS (
SELECT 1 AS Position, SUBSTRING(@InputString, 1, 1) AS CleanedString
UNION ALL
SELECT Position + 1, SUBSTRING(@InputString, Position + 1, 1)
FROM CTE
WHERE Position < LEN(@InputString)
)
SELECT STRING_AGG(CleanedString, '') AS CleanedString
FROM CTE
WHERE CleanedString LIKE '[a-zA-Z0-9]';
Объяснение: Этот метод использует рекурсивное общее табличное выражение (CTE) для перебора каждого символа во входной строке. Он добавляет к результату только буквенно-цифровые символы. Окончательно очищенная строка получается с помощью функции STRING_AGG для объединения символов.
Метод 3. Использование скалярной функции
CREATE FUNCTION dbo.RemoveNonAlphanumeric
(
@InputString VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @OutputString VARCHAR(MAX) = '';
DECLARE @Position INT = 1;
DECLARE @Length INT = LEN(@InputString);
WHILE @Position <= @Length
BEGIN
IF SUBSTRING(@InputString, @Position, 1) LIKE '[a-zA-Z0-9]'
SET @OutputString += SUBSTRING(@InputString, @Position, 1);
SET @Position += 1;
END
RETURN @OutputString;
END
GO
-- Usage:
DECLARE @InputString VARCHAR(MAX) = 'ab!@#$cd123!@#';
SELECT dbo.RemoveNonAlphanumeric(@InputString) AS CleanedString;
Объяснение: Этот метод предполагает создание скалярной функции с именем «RemoveNonAlphanumeric», которая принимает входную строку и перебирает каждый символ. Он добавляет в выходную строку только буквенно-цифровые символы. Затем функция используется для очистки входной строки.
В этой статье мы рассмотрели три различных метода удаления небуквенно-цифровых символов из строки в T-SQL. В зависимости от ваших конкретных требований и предпочтений вы можете выбрать наиболее подходящий метод для вашего сценария. Эти методы помогут вам эффективно очистить и нормализовать текстовые данные в SQL Server, гарантируя качество и согласованность данных.