2016-11-22 66 views
1

我有,我需要解析列值來獲得與之相關的工作請求次數的要求正則表達式匹配字符串的一部分。例如,該列的值可以包含 - 「從事過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

回答

1
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

1
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

1

您可以嘗試使用下面的表達式

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

使用上面給了我下面的結果

enter image description here

希望這可以幫助你。

+0

感謝您的回答,但如果列值中有任何其他連字符,它將不起作用。有什麼方法可以匹配確切的XX-XXXXXXX格式? – Subha

1

使用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

2

這工作:

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