sql >> Base de Datos >  >> RDS >> Sqlserver

Dividir palabras con mayúscula en sql

Aquí hay una función que creé que es similar a "eliminar caracteres no alfabéticos". ¿Cómo eliminar todos los caracteres no alfabéticos de una cadena en SQL Server?

Este usa una intercalación que distingue entre mayúsculas y minúsculas que busca activamente una combinación de letras mayúsculas/sin espacio y luego usa la función STUFF para insertar el espacio. Este ES un UDF escalar, por lo que algunas personas dirán de inmediato que será más lento que otras soluciones. A esa noción, le digo, por favor pruébela. Esta función no utiliza ningún dato de la tabla y solo realiza un bucle tantas veces como sea necesario, por lo que es probable que le brinde un muy buen rendimiento.

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

Llámalo así:

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