在sql中用大写字母分隔单词

jac*_*ler 11 sql t-sql sql-server

有谁知道如何从字符串中以大写字母开头分割单词?

例:

    DECLARE @var1 varchar(100) = 'OneTwoThreeFour'
    DECLARE @var2 varchar(100) = 'OneTwoThreeFourFive'
    DECLARE @var3 varchar(100) = 'One'

    SELECT @var1 as Col1, <?> as Col2
    SELECT @var2 as Col1, <?> as Col2
    SELECT @var3 as Col1, <?> as Col2
Run Code Online (Sandbox Code Playgroud)

预期结果:

    Col1                Col2
    OneTwoThreeFour     One Two three Four
    OneTwoThreeFourFive One Two Three Four Five
    One                 One
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的(或者如果太长),标量函数也可以.

G M*_*ros 17

这是我创建的一个类似于"删除非字母字符"的函数. 如何从SQL Server中的字符串中删除所有非字母字符?

这个使用区分大小写的排序规则,它主动寻找非空格/大写字母组合,然后使用STUFF函数插入空格.这是一个标量UDF,因此有些人会立即说它会比其他解决方案慢.对于这个概念,我说,请测试一下.此函数不使用任何表数据,只根据需要循环多次,因此它可能会为您提供非常好的性能.

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
Run Code Online (Sandbox Code Playgroud)

像这样称呼它:

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')
Run Code Online (Sandbox Code Playgroud)