Zde je funkce, kterou jsem vytvořil a která je podobná "odstranění neabecedních znaků". Jak odstranit všechny neabecední znaky z řetězce na serveru SQL?
Tento používá třídění rozlišující malá a velká písmena, které aktivně vyhledává kombinaci bez mezery/velká písmena a poté používá funkci STUFF k vložení mezery. Toto JE skalární UDF, takže někteří lidé okamžitě řeknou, že to bude pomalejší než jiná řešení. K této představě říkám, prosím otestujte to. Tato funkce nepoužívá žádná tabulková data a zacyklí pouze tolikrát, kolikrát je potřeba, takže vám pravděpodobně poskytne velmi dobrý výkon.
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
Nazvěte to takto:
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')