如何获得与在SQL Server

如何获得与在SQL Server

问题描述:

我有,我需要解析列值来获得与之相关的工作请求次数的要求正则表达式匹配字符串的一部分。例如,该列的值可以包含 - “从事过AB-0012589”“AB-0012589完成”或包含在其中的工作请求数不管。 (这里AB-0012589是工作请求数)。如何获得与在SQL Server

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

所以,如果列值为 “完成AC-0015587” 我期望的输出是AC-0015587

提前感谢!

+0

从列值,我想其中XX-XXXXXXX模式相匹配的部分。正如在我的问题中给出的例子所说的。 – Subha

+0

查看我编辑的答案:[链接](http://stackoverflow.com/a/40740839/3884240) – Nina

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') 
+0

很棒!感谢@cloudsafe并恭喜你的早期观点:) – Subha

select substring('Completed AC-0015587',(CHARINDEX('-','Completed AC-0015587')-2), 10) 

输出中 AC-0015587

+1

工作请求将不会每次都是相同的。它可能会改变,但格式将是相同的。这就是我寻找正则表达式解决方案的原因。 – Subha

+0

是将工作ü可以通过使用列名仅此格式 XX-XXXXXXX .. @萨卜哈 – Chanukya

+0

我不想从这里分离出字母和数字的检查。我的问题是,如果我有一列有像“AV-0217585 Worked”那样的值,我该如何解析并从那里获得值“AV-0217585”?请参阅我无法对号码进行硬编码。这将会改变。格式将是相同的。我希望这是有道理的。 – Subha

您可以尝试使用下面的表达式

substring(t1.column_value,(CHARINDEX('-',t1.column_value)-2), 10)

使用上面给了我下面的结果

enter image description here

希望这可以帮助你。

+0

感谢您的回答,但如果列值中有任何其他连字符,它将不起作用。有什么方法可以匹配确切的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')) 
+0

谢谢您的回答,但如果列值中有任何其他连字符,它将不起作用。有什么方法可以匹配确切的XX-XXXXXXX格式? – Subha

+0

@Subha立即更新帖子。 – Buddi

这工作:

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

+0

只需用您的表格名称'您的列'和'(选择'在AB-0012589上作为值选择'作为MyTable'] – Nina

+0

感谢您的回答,但如果其中有任何其他连字符列值。有什么方法可以匹配确切的XX-XXXXXXX格式? – Subha

+0

非常感谢Nina! – Subha