2012-02-01 13 views
0

次のパターンがあります。SQL - 文字列内のランダムインデックスから始まる文字列パターンの一致方法

AA(AA)-NBXXYYY-CCCCCCC(CC)-DD(D)括弧内の値は任意であり、存在しなくてもよい

文字列のXX部分だけを選択したいと思います。部分文字列を巧みに使って行うことができますか?私はここで良い入力を感謝します。

編集: 最初のハイフン( - )の前に常にスキップすることができますが、これは常にそこにありますが、実装方法はまだ分かりません。

+0

私はあなたが何かに上だと思う、値がこのようなものになるだろう。 10-1R22345-33PY101-N4 100-1R22345-33PY101Z-N4 1000-1R22345-33PY101ZZ-N4 – cc0

答えて

1
declare @S varchar(100) = 'AA(AA)-NBXXYYY-CCCCCCC(CC)-DD(D)' 

-- First two characters after –NB 
select substring(@S, charindex('-NB', @S)+3, 2) 

-- Or if it is not always NB just find the first – 
select substring(@S, charindex('-', @S)+3, 2) 

;with C(col) as 
(
    select '10-1R22345-33PY101-N4' union all 
    select '100-1R22345-33PY101Z-N4' union all 
    select '1000-1R22345-33PY101ZZ-N4' 
) 

select substring(col, charindex('-', col)+3, 2) 
from C 
+1

@ cc0 - 第2版では、 '-'と' XX'の間に2つの文字が必要です。 –

+1

@ cc0異なるハイフンを使用しています。 'select ascii( ' - ')、ascii( ' - ')'なぜ、第2のバージョンの継ぎ目がバグか:)。サンプルデータを更新してみてください。 –

+1

@ cc0 - ここで試してみてください。 http://data.stackexchange.com/stackoverflow/query/60628/new –

0

テキストフィールドの解析を行うために、C#でメソッドを記述することができます。とにかく、あなたが何をしているにしても、あなたはテーブルスキャンエリアにいます。インデックスは機能しません。したがって、SQLによって制限される場合は、統合された.NETランタイムを使用してください。あなたのサンプルデータで

+0

テーブルスキャンが私の目的のために細かいですが、私は今回のCLR統合を使用することから離れて滞在するために期待しています。どんな賢いアイディアですか? – cc0

関連する問題