У меня есть внешнее приложение, передающее строки в Camelcase. Пользователи хотят сообщить о строке и хотят отформатировать ее как предложение. Строка может содержать слова со всеми заглавными буквами, которые нужно добавить вокруг.
здесь построена функция, основанная на этом вопросе: Существует ли какая-либо встроенная функция SQL Server для преобразования строки в случае верблюда?
однако, это не работает со всеми заглавными буквами. Ниже моя модифицированная версия.
DECLARE @String NVARCHAR(MAX) = 'ThisIsASentenceWithCAPTIInIt'
--, @Len INT -- = LEN(@String)
, @Delimiter CHAR(1) = ' '
, @Iterator INT = 2; --Don't put space to left of first even if it's a capital
WHILE @Iterator <= LEN(@String)
-- Iterate through string
BEGIN
-- Check if current character is Uppercase (lowercase = 0)
IF PATINDEX('[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', SUBSTRING(@String, @Iterator, 1) COLLATE Latin1_General_CS_AI) <> 0
-- Do this if capital
BEGIN
-- check if the previous character is lowercase, if it is then add a space before the current character.
IF(
(PATINDEX('[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', SUBSTRING(@String, @Iterator - 1, 1) COLLATE Latin1_General_CS_AI) = 0
AND SUBSTRING(@String, @Iterator - 1, 1) <> ' '
)
OR PATINDEX('[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', SUBSTRING(@String, @Iterator + 1, 1) COLLATE Latin1_General_CS_AI) = 0)
BEGIN
SET @String = STUFF(@String, @Iterator, 0, @Delimiter);
SET @Iterator+=1;
END;
-- check if the next character is lowercase, if it is then add a space before the current character.
SET @Iterator+=1;
END;
---- Don't care about current character being lowercase. Just continue iterating
SET @Iterator+=1;
END;
SELECT @String;
Пример того, что я получаю из приложения - "ThisIsASentenceWithCAPTIInIt"
То, что я хочу передать назад - «Это предложение с CAPTI в нем»
Что я получаю от моей модифицированной версии - «Это предложение с помощью CAPTIIn It»