sql - sql中大写字母的拆分词

标签 sql sql-server tsql

有人知道如何从字符串中拆分以大写字母开头的单词吗?

示例:

    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

预期结果:

    Col1                Col2
    OneTwoThreeFour     One Two three Four
    OneTwoThreeFourFive One Two Three Four Five
    One                 One

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

最佳答案

这是我创建的一个类似于“删除非字母字符”的函数。 How to strip all non-alphabetic characters from string in 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

这样调用它:

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

关于sql - sql中大写字母的拆分词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23470794/

相关文章:

mysql - 或在 MySQL 中加入

sql-server - ExecuteReaderAsync 导致 sql 查询需要更长时间才能完成?

sql-server - 如何找到 MS SQL Server 2008 的端口?

sql - 在多列上插入行自动增量

sql - 无法在 PL/SQL 中运行 hello world

sql - SQL 长度函数如何处理 unicode 字素?

sql - 从现有数据填充 Visual Studio 数据库项目数据加载脚本

sql-server - SQL查询当前不支持返回别名

database - 用户搜索关键字与标签的匹配

sql - 尝试通过脚本为 SQL Server 设置全文搜索