我很难找到一种可靠的方法从SQLServer Management Studio中的字符串中提取序列号。例如iPad2 Black DMPJ491PDVD1 smart case
或16BG SF4KNK6BKG5D9
看看(https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql),似乎LIKE子句无法处理像连续查找大写或数字的10个以上字符的事情,如果找到类似的东西抓住所有这些角色。
可以在SQL / T-SQL中完成吗?我正在使用SQLServer 2008。
答案 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