Это будет добавлять пробелы, только если предыдущий и следующий символ в нижнем регистре.Таким образом, «MyABCAnalysis» будет «Мой анализ ABC».
Я также добавил проверку для предыдущего пробела.Поскольку некоторые из наших строк имеют префикс «GR_», а некоторые также содержат подчеркивания, мы можем использовать функцию замены следующим образом:
select dbo.GR_SpaceBeforeCap (replace ('GR_ABCAnalysis_Test', '_', '')) Возвращает «GR ABC Analysis Test»
CREATE FUNCTION GR_SpaceBeforeCap (
@str nvarchar(max)
)
returns nvarchar(max)
as
begin
declare
@i int, @j int
, @cp nchar, @c0 nchar, @c1 nchar
, @result nvarchar(max)
select
@i = 1
, @j = len(@str)
, @result = ''
while @i <= @j
begin
select
@cp = substring(@str,@i-1,1)
, @c0 = substring(@str,@i+0,1)
, @c1 = substring(@str,@i+1,1)
if @c0 = UPPER(@c0) collate Latin1_General_CS_AS
begin
-- Add space if Current is UPPER
-- and either Previous or Next is lower
-- and Previous or Current is not already a space
if @c0 = UPPER(@c0) collate Latin1_General_CS_AS
and (
@cp <> UPPER(@cp) collate Latin1_General_CS_AS
or @c1 <> UPPER(@c1) collate Latin1_General_CS_AS
)
and @cp <> ' '
and @c0 <> ' '
set @result = @result + ' '
end -- if @co
set @result = @result + @c0
set @i = @i + 1
end -- while
return @result
end