Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wörter mit großbuchstaben in sql trennen

Hier ist eine Funktion, die ich erstellt habe und die dem "Entfernen nicht alphabetischer Zeichen" ähnelt. Wie entferne ich alle nicht alphabetischen Zeichen aus der Zeichenfolge in SQL Server?

Dieser verwendet eine Sortierung mit Berücksichtigung der Groß- und Kleinschreibung, die aktiv nach einer Kombination aus Nicht-Leerzeichen/Großbuchstaben sucht und dann die STUFF-Funktion verwendet, um das Leerzeichen einzufügen. Dies IST ein skalares UDF, daher werden einige Leute sofort sagen, dass es langsamer sein wird als andere Lösungen. Zu dieser Vorstellung sage ich, bitte testen Sie es. Diese Funktion verwendet keine Tabellendaten und führt Schleifen nur so oft wie nötig aus, sodass Sie wahrscheinlich eine sehr gute Leistung erzielen werden.

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

Nennen Sie es so:

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