Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Palavras divididas com uma letra maiúscula em sql


Aqui está uma função que criei que é semelhante à "remoção de caracteres não alfabéticos". Como remover todos os caracteres não alfabéticos da string no SQL Server?

Este usa um agrupamento sensível a maiúsculas e minúsculas que procura ativamente uma combinação sem espaço/letras maiúsculas e, em seguida, usa a função STUFF para inserir o espaço. Esta é uma UDF escalar, então algumas pessoas dirão imediatamente que será mais lenta do que outras soluções. Para essa noção, eu digo, por favor, teste-a. Esta função não usa nenhum dado da tabela e apenas faz o loop quantas vezes forem necessárias, então provavelmente lhe dará um desempenho muito bom.
Create Function dbo.Split_On_Upper_Case(@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin

    Declare @KeepValues as varchar(50)
    Set @KeepValues = '%[^ ][A-Z]%'
    While PatIndex(@KeepValues collate Latin1_General_Bin, @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex(@KeepValues collate Latin1_General_Bin, @Temp) + 1, 0, ' ')

    Return @Temp
End

Chame assim:
Select dbo.Split_On_Upper_Case('OneTwoThreeFour')
Select dbo.Split_On_Upper_Case('OneTwoThreeFour')
Select dbo.Split_On_Upper_Case('One')
Select dbo.Split_On_Upper_Case('OneTwoThree')
Select dbo.Split_On_Upper_Case('stackOverFlow')
Select dbo.Split_On_Upper_Case('StackOverFlow')