如何在SQL Server中获取与正则表达式匹配的字符串的一部分

Sub*_*bha 5 regex sql-server

我有一个要求,我需要解析列值以获取与其关联的工作请求编号。例如,列值可能包含“已处理 AB-0012589”“AB-0012589 已完成”或其中包含工作请求编号的任何内容。(此处AB-0012589是工作请求编号)。

工作请求编号的格式不会改变。格式为xx-xxxxxxx,其中连字符之前的两个字符为字母,后面的部分为数字。如何使用正则表达式从列值中解析工作请求编号?

因此,如果列值为“已完成 AC-0015587 ”,我所需的输出为AC-0015587

提前致谢!

Nin*_*ina 7

这有效:

declare @Value nvarchar(4000)
set @Value='Worked a-232 on AB-0012589'

select substring(@Value,
patindex('%[A-Z][A-Z][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%',@Value),10)
Run Code Online (Sandbox Code Playgroud)

将 @Value 替换为您的列

输出: AB-0012589


clo*_*afe 4

Create function ReturnPart (@val as varchar(100))
 Returns varchar(10)
 as
 begin
 declare @length as int 
 declare @loop as int
 declare @ret as varchar(10)
 set @loop =1
 set @length = len(@val)

 while @loop<=@length-9
    begin
    if exists(select 1 where substring(@val,@loop,10) like '[a-z][a-z][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
        set @ret = substring(@val,@loop,10)
    set @loop=@loop+1
    end
Return @ret
end



select dbo.ReturnPart('Worked on AB-0012589')
select dbo.ReturnPart('AB-0012589 is completed')
Run Code Online (Sandbox Code Playgroud)