2016-08-02 24 views
1

SQL Serverを使用して特定の単語をトリムしようとしています。例えば:私はデータの下でテーブルを持っている:私は出力を取得しようとしているSQL Serverの正規表現のヘルプが必要

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

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

すなわち第二の矢印までトリミングしようとしている「 - >」とした後にのみ、単語を表示それ。私はstuffとcharindexを使ってみました。

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

これが機能するかどうかわかりません。この出力を得るために私を助けてくれますか?

ありがとうございます。

+2

B:でこれを実行しようとして再」、あなたは非常に簡単に次のことを実行することができ区切られた値の格納を停止することです。次に、必要なデータを取得するのは簡単です。区切り値は1NFに違反します。 –

答えて

0

これで分けられるはずです。

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

この内容はどうですか? @tは、私は、ユーザー定義関数で文字列を解析するためのロジックを保つことをお勧め厳密に必要ではないが、あなたのコラム

+0

これは正確に動作します。あなたの助けをありがとう! – Steve

+0

ようこそ。可能であれば、他のユーザーを助けるために「解決」と答えてください。それ以外の場合、@seanが示唆するように、より良い方法でデータを格納しようとするかもしれません! – Alberto

0

ある

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

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

。文字列解析ロジックを改善または更新する必要がある場合は、残りのクエリを変更せずに関数を単純に更新することができます。

説明に基づいて、文字列の3番目の単語または最後の単語が必要です。私は、3番目の単語が必要であり、文字列内の単語の数が可変であると仮定しています。次の関数は、あなたが望むものを返す必要があります。

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 

必要はありません正規表現

関連する問題