以下是我的数据示例:
ABC * 12345ABC
BCD * 234()
CDE * 3456789(安培;(安培;
DEF * 4567A * B * C
使用SQL Server 2008或SSIS,我需要解析此数据并返回以下结果:
12345
234个
3456789个
4567
如您所见,星号(*)是我的第一个分隔符。第二个“分隔符”(我松散地使用这个术语)是数字序列停止时。
所以,基本上,只需抓住星号后面的数字序列......
我该如何做到这一点?
编辑:
我在原帖中犯了一个错误。另一个可能值的一个例子是:
XWZ * A12345%$%
在这种情况下,我想返回以下内容:
A12345
该值可以以字母开头,但始终以数字结尾。因此,在星号后抓住所有内容,但停在序列中的最后一个数字处。
非常感谢任何帮助!
答案 0 :(得分:2)
你可以用一点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
答案 1 :(得分:0)
如果忽略这是在SQL中,那么首先想到的是Regex:
^.*\*(.*[0-9])[^0-9]*$
捕获组应该得到你想要的东西。我不知道SQL是否具有正则表达式函数。