Sql server 2005 字符串操作的另一个挑战

Sql server 2005 字符串操作的另一个挑战,sql-server-2005,tsql,Sql Server 2005,Tsql,我必须将数据管理到该文件中,其间有空白: 0297144600-4799 0297485500-5599 0297144600-0297144799 0297485500-5599 0297144600-0297144799 0297485500-0297485599 我想正常化第一行/第二行,就像最后一行一样,这意味着 0297144600-4799 >> 0297144600-0297144799 挑战在于,它可以采用以下格式:0297144600-4799或已经标准化,并

我必须将数据管理到该文件中,其间有空白:

0297144600-4799 0297485500-5599
0297144600-0297144799 0297485500-5599

0297144600-0297144799 0297485500-0297485599
我想正常化第一行/第二行,就像最后一行一样,这意味着

0297144600-4799 >> 0297144600-0297144799
挑战在于,它可以采用以下格式:0297144600-4799或已经标准化,并且这些条目可以超过2个系列,例如:

0297144600-4799 0297485500-5599 0297486500-6599
但理论上总是用空格分隔,如果你愿意,可以用“|”代替。我确实有一个拆分方法要做,但现在如何组合这个

如果可能的话,尽量避开光标


谢谢

这和你想的一样吗

declare @table table (old_pair nvarchar(21), new_pair nvarchar(21), pair_left nvarchar(10), pair_right nvarchar(10))

declare @abnormal nvarchar(max)
set @abnormal = isnull('0297144600-0297144799 0297485500-0297485599','')
--set @abnormal = isnull('0297144600-4799 0297485500-5599','')
--set @abnormal = isnull('0297485500-5599','')

declare @pair nvarchar(max)
declare @pair_left nvarchar(10)
declare @pair_right nvarchar(10)
declare @pair_right_length int

WHILE len(isnull(@abnormal,'')) > 0
BEGIN
    IF charindex(' ', @abnormal) = 0
        BEGIN
            set @pair = @abnormal
        END
    ELSE
        BEGIN
            set @pair = left(@abnormal, charindex(' ', @abnormal)-1)
        END
    set @pair_left = left(@pair, 10)
    set @pair_right_length = len(right(@pair,len(@pair)-11))
    set @pair_right = left(@pair_left, 10-@pair_right_length) + right(@pair,len(@pair)-11)

    insert @table
    (   old_pair,
        new_pair,
        pair_left,
        pair_right  )
    select 
        @pair, 
        @pair_left + '-' + @pair_right,
        @pair_left, 
        @pair_right

    IF @pair = @abnormal
        BEGIN
            set @abnormal = (right(@abnormal, len(@abnormal)-len(@pair)))
        END
    ELSE
        BEGIN
            set @abnormal = (right(@abnormal, len(@abnormal)-(len(@pair)+1)))
        END
END
    select * from @table

我可以发誓你几天前发布了一个分割函数…分割函数工作得很好,但现在的挑战是数据没有正常化。格式需要是0297144600-0297144799 10位数字,由另一个10位数字分隔。请问你到底在问什么?向我们展示一些中间步骤或逐行操作:你的问题毫无意义。所以你要做的是在一个空间中拆分每一行;b在破折号上分开每一对;c如果第二个字符是四个字符,那么在第一个字符后面加上前六个字符?请您详细解释一下或者确认@Yellowfog的假设好吗?谢谢