我有一个要求,我需要解析列值以获取与其关联的工作请求编号。例如,列值可能包含“已处理 AB-0012589”或“AB-0012589 已完成”或其中包含工作请求编号的任何内容。(此处AB-0012589是工作请求编号)。
工作请求编号的格式不会改变。格式为xx-xxxxxxx,其中连字符之前的两个字符为字母,后面的部分为数字。如何使用正则表达式从列值中解析工作请求编号?
因此,如果列值为“已完成 AC-0015587 ”,我所需的输出为AC-0015587
提前致谢!
这有效:
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
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)