Еще одна проблема в Манипуляция строк - PullRequest
0 голосов
/ 23 июля 2010

Я должен управлять данными в этом, и между ними есть пробел:

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

0297144600-0297144799 0297485500-0297485599

Я хочу нормализовать первый / второй ряд, как последний ряд, что означает

0297144600-4799 >> 0297144600-0297144799

Сложность заключается в том, что он может быть в этом формате: 0297144600-4799 или уже нормализован, и эти записи могут быть более двух серий, например:

0297144600-4799 0297485500-5599 0297486500-6599

Но всегда разделяется пробелом (теоретически его можно заменить на «|», если хотите). У меня есть метод разбиения, но теперь как это объединить.

Старайтесь избегать курсора, если это возможно.

Спасибо

1 Ответ

0 голосов
/ 03 августа 2010

Это то, что вы имели в виду?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...