2016-08-02 30 views
1

我想使用SQL Server修剪特定的單詞。例如:我有一個表如下數據:在SQL Server中需要正則表達式的幫助

Column1 | Column2 
---------+----------------- 
Test1 | ABC->IT->CDE 
Test2 | ABCD->OT->FGH 

我試圖讓輸出爲:

Column1 | Column2 
--------+---------- 
Test1 | CDE 
Test2 | FGH 

即試圖削減,直到第二個箭頭「 - >」之後只顯示文字那。我嘗試過使用東西和charindex。

case 
    when Column2 like '%->%' 
     then stuff(Column2, 1, charindex('%[A-Z]%->%[A-Z]%->',Column2),'') 
     else null 
end as Test 

不確定這是否正常工作。你能幫我解決這個問題嗎?

在此先感謝。

+2

在b est解決方案將停止存儲分隔值。然後,檢索您想要的數據變得微不足道。分隔值違反1NF。 –

回答

0

這應該讓你分裂。

SELECT 
    Column1, 
    REVERSE(LEFT(reverse(Column2), charindex('>', reverse(Column2)) - 1)) as Column2 
FROM Table1 
0

這是怎麼回事?

DECLARE @t as Varchar(255) = 'ABC->IT->CDE' 

select REVERSE(SUBSTRING(REVERSE(@t), 0, CHARINDEX(REVERSE('->'), REVERSE(@t)))) 

其中@t是你列

+0

這確實起作用。非常感謝你的幫助 !! – Steve

+0

不客氣。如果可能,請將答案檢查爲「解決」以幫助其他用戶。否則,正如@sean所建議的那樣,您可以嘗試以更好的方式存儲數據! – Alberto

0

雖然不是絕對必要,我會建議保持你的邏輯分析在用戶自定義函數的字符串。如果您需要改進或更新您的字符串解析邏輯,您可以簡單地更新該函數而不更改其餘查詢。

根據你的描述,你要麼想要字符串的第三個單詞或字符串中的最後一個單詞。我假設你想要第三個單詞,並且字符串中的單詞數量可以變化。下面的函數應該返回你想要的。

CREATE FUNCTION GetThirdWord 
(
    @inputString VARCHAR(200), 
    @delimitor  VARCHAR(10) 
) 
RETURNS VARCHAR(200) 
AS 
BEGIN 

    DECLARE @result NVARCHAR(50); 
    DECLARE @delimitorLength INT = LEN(@delimitor); 

    DECLARE @firstDelimitor INT = charindex('->', @inputString); 
    DECLARE @secondDelimitor INT = charindex('->', @inputString, @firstDelimitor + @delimitorLength); 
    DECLARE @thirdDelimitor INT = charindex('->', @inputString, @secondDelimitor + @delimitorLength); 

    IF @secondDelimitor > 0 
    BEGIN 

     IF @thirdDelimitor = 0 
      SET @thirdDelimitor = LEN(@inputString); 

     SET @result = SUBSTRING(@inputString, @secondDelimitor + @delimitorLength, @thirdDelimitor - @secondDelimitor - @delimitorLength) 

    END 

    RETURN @result; 

END 

的功能可以被稱爲如下:

SELECT Column1, 
     dbo.GetThirdWord(Column2, '->') AS Column2 
FROM YourTableName 
0

你還沒有給我足夠的信息,以確保該會的工作,但如果格式始終是行同你正在嘗試上做到這一點,你可以很容易地執行以下操作:

select right(Column2,3) 
into #NewColumn 
from YourTable 
where YourConditionsHere 

沒有必要的正則表達式