如何从文本中提取图案

时间:2018-08-20 14:28:31

标签: sql sql-server

我只想从称为“文档”的文本字段中提取dni

我的数据库中有一些这样的文本:

Document varchar(max):

"Lorem ipsum 12345678-0 dolor 2345678-k sit amet, consectetur $2000000 adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."

我只想要dni:

12345678-0
2345678-k

而忽略:$ 2000000

2 个答案:

答案 0 :(得分:4)

这是一种SQL方法。

如果SQL 2016 + ...使用string_split()

您可能需要调整WHERE才能更符合您的实际需求。

示例

Declare @YourTable table (ID int,Document varchar(max))
Insert Into @YourTable values
(1,'Lorem ipsum 12345678-0 dolor 2345678-k sit amet, consectetur $2000000 adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.')

Select A.ID
      ,B.*
 From  @YourTable A
 Cross Apply (
                Select RetSeq = Row_Number() over (Order By (Select null))
                      ,RetVal = B.i.value('(./text())[1]', 'varchar(max)')
                From  (Select x = Cast('<x>' + replace((Select replace(A.Document,' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
                Cross Apply x.nodes('x') AS B(i)
                Where B.i.value('(./text())[1]', 'varchar(max)') like '[0-9]%-%'
             ) B

返回

ID  RetSeq  RetVal
1   1       12345678-0
1   2       2345678-k

答案 1 :(得分:-1)

不确定DNI代表什么,但假设它只是一个用破折号组合表示数字的字符串,则可以使用拆分字符串+类似的表达式。

Supply