Преобразование текста из верхнего регистра в Title Case в SQL Server

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы в SQL Server преобразовать текст к начальному регистру, вы можете использовать следующий запрос:

SQL
Скопировать код
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 склеивает их обратно в строку. Этот метод эффективен для базового преобразования, но необходимо учитывать некоторые особенности использования регистра.

Кинга Идем в IT: пошаговый план для смены профессии

Переходим на следующий уровень: обработка исключений и особых случаев

Для сложных ситуаций необходимы более гибкие решения.

Особых случаев и акронимов

Некоторые слова, такие как SQL или NASA, должны остаться в верхнем регистре. Модифицируем наш метод, чтобы он учитывал такие особенности:

SQL
Скопировать код
-- Функция для обработки исключений
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 или курсоров, которые могут снизить производительность.

Полезные материалы

  1. FORMAT (Transact-SQL) – SQL Server | Microsoft Learn — официальное руководство от Microsoft.
  2. Evaluating Policies on Multiple SQL Server Instances using Central Management Server — статья о возможностях CLR в SQL Server.
  3. Concatenating Row Values in Transact-SQL – Simple Talk — дополнительные методы работы со строками в T-SQL.