TSQL - 从字符串中提取序列号。可能正则表达式?

时间:2017-09-25 21:33:28

标签: sql sql-server regex sql-server-2008 tsql

我很难找到一种可靠的方法从SQLServer Management Studio中的字符串中提取序列号。例如iPad2 Black DMPJ491PDVD1 smart case16BG SF4KNK6BKG5D9

看看(https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql),似乎LIKE子句无法处理像连续查找大写或数字的10个以上字符的事情,如果找到类似的东西抓住所有这些角色。

可以在SQL / T-SQL中完成吗?我正在使用SQLServer 2008。

1 个答案:

答案 0 :(得分:1)

这是一种在线拆分方法。

示例

Declare @YourTable Table ([ID] int,[SomeCol] varchar(50))
Insert Into @YourTable Values 
 (1,'iPad2 Black DMPJ491PDVD1 smart case')
,(2,'16BG SF4KNK6BKG5D9 SF4KNK6BKG5D9')

Select A.* 
      ,SN = B.RetVal
 From @YourTable A
 Cross Apply (
                Select Distinct RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
                From  (Select x = Cast('<x>' + replace((Select replace(A.SomeCol,' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
                Cross Apply x.nodes('x') AS B(i)
             ) B
 Where Len(RetVal)>=10 
   and patindex('%[0-9]%',RetVal)>0

<强>返回

ID  SomeCol                               SN
1   iPad2 Black DMPJ491PDVD1 smart case   DMPJ491PDVD1
2   16BG SF4KNK6BKG5D9                    SF4KNK6BKG5D9