Разобрать значение столбца на основе разделителей - PullRequest
1 голос
/ 22 октября 2010

Вот пример моих данных:

ABC * 12345ABC
BCD * 234 ()
CDE * 3456789 (& (&
DEF * 4567A * B * C

Используя SQL Server 2008 или SSIS, мне нужно проанализировать эти данные и вернуть следующий результат:

12345
234
3456789
4567

Как выКак видите, звездочка (*) - мой первый разделитель. Второй «разделитель» (я использую этот термин свободно) - это когда последовательность чисел останавливается.

Так что, в принципе, просто возьмите последовательность чисел послезвездочка ...

Как мне это сделать?

РЕДАКТИРОВАТЬ:

Я допустил ошибку в своем исходном сообщении. Примером другого возможного значения будет:

XWZ * A12345% $%

В этом случае я хотел бы вернуть следующее:

A12345

Значение может НАЧАТЬСЯ с буквенным символом, но он всегда будет КОНЕЦ с числом. Итак, возьмите все после звездочки, но остановитесь на последнем числе в последовательности.

Любая помощь с этим будет большойВы оценили!

Ответы [ 2 ]

2 голосов
/ 22 октября 2010

Вы можете сделать это с помощью небольшой хитрости patindex и charindex, например:

; with YourTable(col1) as 
        (
        select 'ABC*12345ABC'
        union all select 'BCD*234()'
        union all select 'CDE*3456789(&(&'
        union all select 'DEF*4567A*B*C'
        union all select 'XWZ*A12345%$%'
        )
select  left(AfterStar, len(Leader) + PATINDEX('%[^0-9]%', AfterLeader) - 1)
from    (
        select  RIGHT(AfterStar, len(AfterStar) - PATINDEX('%[0-9]%', AfterStar) + 1) 
                    as AfterLeader
        ,       LEFT(AfterStar, PATINDEX('%[0-9]%', AfterStar) - 1) as Leader
        ,       AfterStar
        from    (
                select  RIGHT(col1, len(col1) - CHARINDEX('*', col1)) as AfterStar
                from    YourTable
                ) as Sub1
        ) as Sub2

Это печатает:

12345
234
3456789
4567
A12345
0 голосов
/ 22 октября 2010

Если вы игнорируете, что это в SQL, то первое, что приходит на ум, это Regex:

^.*\*(.*[0-9])[^0-9]*$

Группа захвата должна получить то, что вы хотите. Я не знаю, есть ли в SQL функция регулярного выражения.

...