我只想从称为“文档”的文本字段中提取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
答案 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