Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Dividi le parole con una lettera maiuscola in sql

Ecco una funzione che ho creato che è simile alla "rimozione di caratteri non alfabetici". Come rimuovere tutti i caratteri non alfabetici dalla stringa in SQL Server?

Questo utilizza un confronto case sensitive che cerca attivamente una combinazione non-spazio/lettere maiuscole e quindi utilizza la funzione STUFF per inserire lo spazio. Questa è una UDF scalare, quindi alcune persone diranno immediatamente che sarà più lenta di altre soluzioni. A quella nozione, dico, per favore provalo. Questa funzione non utilizza alcun dato di tabella e si ripete solo tutte le volte necessarie, quindi probabilmente ti darà prestazioni molto buone.

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

Chiamalo così:

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')