如何获得与在SQL Server
我有,我需要解析列值来获得与之相关的工作请求次数的要求正则表达式匹配字符串的一部分。例如,该列的值可以包含 - “从事过AB-0012589”或“AB-0012589完成”或包含在其中的工作请求数不管。 (这里AB-0012589是工作请求数)。如何获得与在SQL Server
格式的工作请求数量不会改变。它将在xx-xxxxxxx格式中,连字符前的两个字符将为,字母为,后面的部分为,数字为。如何使用正则表达式从列值解析工作请求编号?
所以,如果列值为 “完成AC-0015587” 我期望的输出是AC-0015587
提前感谢!
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<[email protected]
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 @[email protected]+1
end
Return @ret
end
select dbo.ReturnPart('Worked on AB-0012589')
select dbo.ReturnPart('AB-0012589 is completed')
很棒!感谢@cloudsafe并恭喜你的早期观点:) – Subha
select substring('Completed AC-0015587',(CHARINDEX('-','Completed AC-0015587')-2), 10)
输出中 AC-0015587
您可以尝试使用下面的表达式
substring(t1.column_value,(CHARINDEX('-',t1.column_value)-2), 10)
使用上面给了我下面的结果
希望这可以帮助你。
感谢您的回答,但如果列值中有任何其他连字符,它将不起作用。有什么方法可以匹配确切的XX-XXXXXXX格式? – Subha
使用PATINDEX,找到 ' - ' 从我们可以获取工作请求数
select substring('Completed AC-0015587',
patindex('%-%','Completed AC-0015587')-2,len('Completed AC-0015587'))
更新位置:更改PATINDEX像下面它可以帮助你
select substring('Worked on- AV-0217585',
patindex('%-[0-9]%','Worked on- AV-0217585')-2,len('Worked on- AV-0217585'))
这工作:
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)
替换@Value与列
输出: AB-0012589
从列值,我想其中XX-XXXXXXX模式相匹配的部分。正如在我的问题中给出的例子所说的。 – Subha
查看我编辑的答案:[链接](http://stackoverflow.com/a/40740839/3884240) – Nina