Преобразование текста из верхнего регистра в Title Case в SQL Server
Быстрый ответ
Для того чтобы в SQL Server преобразовать текст к начальному регистру, вы можете использовать следующий запрос:
SELECT STUFF((
SELECT ' ' + UPPER(LEFT(word, 1)) + LOWER(SUBSTRING(word, 2, LEN(word)))
FROM STRING_SPLIT(REPLACE('Ваш текст', ' ', '.'), '.')
FOR XML PATH('')
), 1, 1, '') AS TitleCase;
Вместо 'Ваш текст'
подставьте ваш текстовый столбец или переменную. Функция STRING_SPLIT
разделяет текст на слова, UPPER
и LOWER
меняют регистр символов, а STUFF
склеивает их обратно в строку. Этот метод эффективен для базового преобразования, но необходимо учитывать некоторые особенности использования регистра.
Переходим на следующий уровень: обработка исключений и особых случаев
Для сложных ситуаций необходимы более гибкие решения.
Особых случаев и акронимов
Некоторые слова, такие как SQL
или NASA
, должны остаться в верхнем регистре. Модифицируем наш метод, чтобы он учитывал такие особенности:
-- Функция для обработки исключений
CREATE FUNCTION dbo.MaintainAcronyms(@word NVARCHAR(255))
RETURNS NVARCHAR(255)
AS
BEGIN
RETURN CASE WHEN @word IN ('SQL', 'NASA') THEN @word
ELSE UPPER(LEFT(@word, 1)) + LOWER(SUBSTRING(@word, 2, LEN(@word)))
END
END
GO
-- Использование функции при преобразовании
SELECT STUFF((
SELECT ' ' + dbo.MaintainAcronyms(word)
FROM STRING_SPLIT(REPLACE('Ваш SQL текст', ' ', '.'), '.')
FOR XML PATH('')
), 1, 1, '') AS TitleCase;
Обработка неанглийских символов
Для работы с текстом на разных языках используем конструкцию COLLATE
, которая поможет корректно обработать юникод и международные символы.
Эффективное управление пробелами и пунктуацией
Рекомендуем предварительно обработать строку, заменив избыточные пробелы. Сочетание цикла WHILE
с функцией REPLACE
позволит оптимизировать входную строку перед преобразованием.
Визуализация
Преобразование из верхнего регистра в начальный можно сравнить с упорядочиванием книжной полки:
До: [SQL, SERVER, DATA, ANALYSIS] – словно крикливые рекламные заголовки.
После: [Sql, Server, Data, Analysis] – всё выглядит аккуратно и понятно, что облегчает поиск необходимой информации.
Создание пользовательских функций (UDF) для надёжного преобразования в начальный регистр
Создание UDF шаг за шагом
На основе MaintainAcronyms
мы создадим UDF ProperCase
, которая будет тщательно обрабатывать каждое слово, учитывая особые случаи, и обеспечивая правильное написание.
Учёт значений NULL и сохранение целостности данных
Наша UDF обрабатывает значения NULL
, используя SQL функции типа ISNULL
и COALESCE
, чтобы гарантировать корректную работу с данными.
Избегание проблем с производительностью
При работе с большим объемом данных стоит быть внимательным к вопросам производительности. Где возможно, предпочитайте set-based операции и избегайте рекурсивных CTE или курсоров, которые могут снизить производительность.
Полезные материалы
- FORMAT (Transact-SQL) – SQL Server | Microsoft Learn — официальное руководство от Microsoft.
- Evaluating Policies on Multiple SQL Server Instances using Central Management Server — статья о возможностях CLR в SQL Server.
- Concatenating Row Values in Transact-SQL – Simple Talk — дополнительные методы работы со строками в T-SQL.