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