Преобразование ЗАГЛАВНЫХ букв в CamelCase в SQL Server Management Studio (SSMS)

В SQL Server Management Studio (SSMS) вы можете столкнуться со сценариями, в которых вам необходимо преобразовать текст из ЗАГЛАВНЫХ букв в CamelCase. Это преобразование может быть полезно для улучшения читаемости или соответствия соглашениям о кодировании. В этой статье мы рассмотрим несколько методов достижения такого преобразования на примерах кода T-SQL. Итак, приступим!

Метод 1: использование пользовательской функции (UDF):

Один из способов преобразовать ВСЕ ЗАГЛАВНЫЕ буквы в CamelCase в SSMS — создать UDF. Вот пример того, как вы можете определить и использовать UDF для этой цели:

CREATE FUNCTION dbo.ConvertAllCapsToCamelCase (@inputString NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @outputString NVARCHAR(MAX) = '';
    SET @inputString = LOWER(@inputString);
    SET @outputString = STUFF(@inputString, 1, 1, UPPER(SUBSTRING(@inputString, 1, 1)));
    DECLARE @i INT = 2;
    WHILE @i <= LEN(@outputString)
    BEGIN
        IF SUBSTRING(@outputString, @i - 1, 1) = ' '
            SET @outputString = STUFF(@outputString, @i, 1, UPPER(SUBSTRING(@outputString, @i, 1)));
        SET @i = @i + 1;
    END
    RETURN @outputString;
END

Чтобы использовать UDF, вы можете просто вызвать его в своем запросе следующим образом:

SELECT dbo.ConvertAllCapsToCamelCase('THIS IS AN EXAMPLE') AS CamelCaseText;

Метод 2: использование функций STRING_SPLIT и STRING_AGG (SQL Server 2017 и более поздних версий):

Если вы используете SQL Server 2017 или более позднюю версию, вы можете воспользоваться функциями STRING_SPLIT и STRING_AGG для преобразования ВСЕХ ЗАГЛАВНЫХ букв в CamelCase. Вот пример:

DECLARE @inputString NVARCHAR(MAX) = 'THIS IS AN EXAMPLE';
DECLARE @outputString NVARCHAR(MAX);
SELECT @outputString = STRING_AGG(UPPER(LEFT(value, 1)) + LOWER(SUBSTRING(value, 2, LEN(value))), ' ')
FROM STRING_SPLIT(@inputString, ' ');
SELECT @outputString AS CamelCaseText;

Метод 3: использование рекурсивного CTE (общего табличного выражения):

Другой подход к преобразованию ВСЕХ ЗАГЛАВНЫХ букв в CamelCase в SSMS — использование рекурсивного CTE. Вот пример, демонстрирующий эту технику:

DECLARE @inputString NVARCHAR(MAX) = 'THIS IS AN EXAMPLE';
DECLARE @outputString NVARCHAR(MAX);
WITH CTE AS (
    SELECT 1 AS Position, UPPER(LEFT(@inputString, 1)) + LOWER(SUBSTRING(@inputString, 2, LEN(@inputString))) AS ConvertedText
    UNION ALL
    SELECT Position + 1, 
           CASE WHEN SUBSTRING(@inputString, Position, 1) = ' '
                THEN ConvertedText + UPPER(SUBSTRING(@inputString, Position + 1, 1)) + LOWER(SUBSTRING(@inputString, Position + 2, LEN(@inputString)))
                ELSE ConvertedText + SUBSTRING(@inputString, Position + 1, 1)
           END
    FROM CTE
    WHERE Position < LEN(@inputString)
)
SELECT TOP 1 @outputString = ConvertedText
FROM CTE
ORDER BY Position DESC;
SELECT @outputString AS CamelCaseText;

В этой статье мы рассмотрели три различных метода преобразования текста из ЗАГЛАВНЫХ букв в CamelCase в SQL Server Management Studio (SSMS). Предпочитаете ли вы использовать пользовательскую функцию, использовать встроенные функции, такие как STRING_SPLIT и STRING_AGG, или использовать рекурсивный CTE, выбор зависит от ваших конкретных требований и версии SQL Server, которую вы используете. Используя эти методы, вы можете легко преобразовать свои данные в соответствии с соглашениями CamelCase, улучшая читаемость и удобство обслуживания ваших SQL-скриптов.