Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Découper des mots avec une majuscule en sql

Voici une fonction que j'ai créée et qui est similaire à la "suppression des caractères non alphabétiques". Comment supprimer tous les caractères non alphabétiques de la chaîne dans SQL Server ?

Celui-ci utilise un classement sensible à la casse qui recherche activement une combinaison non-espace/lettre majuscule, puis utilise la fonction STUFF pour insérer l'espace. C'EST une UDF scalaire, donc certaines personnes diront immédiatement qu'elle sera plus lente que d'autres solutions. À cette notion, je dis, s'il vous plaît testez-la. Cette fonction n'utilise aucune donnée de table et ne boucle qu'autant de fois que nécessaire, elle vous offrira donc probablement de très bonnes performances.

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

Appelez-le comme ceci :

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