1

这是我的数据示例:

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

使用 SQL Server 2008 或 SSIS,我需要解析这些数据并返回以下结果:

12345
234
3456789
4567

如您所见,星号 (*) 是我的第一个分隔符。第二个“分隔符”(我松散地使用这个术语)是数字序列停止时。

所以,基本上,只需抓住星号后面的数字序列......

我怎样才能做到这一点?

编辑:

我在原来的帖子中犯了一个错误。另一个可能值的示例是:

XWZ*A12345%$%

在这种情况下,我想返回以下内容:

A12345

该值可以以字母字符开头,但始终以数字结尾。因此,抓住星号之后的所有内容,但在序列中的最后一个数字处停止。

对此的任何帮助将不胜感激!

4

2 回答 2

2

您可以通过一些技巧来做到这一点patindexcharindex例如:

; 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
于 2010-10-21T22:06:16.787 回答
0

如果您忽略这是在 SQL 中,那么首先想到的是 Regex:

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

那里的捕获组应该得到你想要的。我不知道 SQL 是否有正则表达式函数。

于 2010-10-22T05:03:23.857 回答