次のパターンがあります。SQL - 文字列内のランダムインデックスから始まる文字列パターンの一致方法
AA(AA)-NBXXYYY-CCCCCCC(CC)-DD(D)括弧内の値は任意であり、存在しなくてもよい
。
文字列のXX部分だけを選択したいと思います。部分文字列を巧みに使って行うことができますか?私はここで良い入力を感謝します。
編集: 最初のハイフン( - )の前に常にスキップすることができますが、これは常にそこにありますが、実装方法はまだ分かりません。
次のパターンがあります。SQL - 文字列内のランダムインデックスから始まる文字列パターンの一致方法
AA(AA)-NBXXYYY-CCCCCCC(CC)-DD(D)括弧内の値は任意であり、存在しなくてもよい
。
文字列のXX部分だけを選択したいと思います。部分文字列を巧みに使って行うことができますか?私はここで良い入力を感謝します。
編集: 最初のハイフン( - )の前に常にスキップすることができますが、これは常にそこにありますが、実装方法はまだ分かりません。
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
@ cc0 - 第2版では、 '-'と' XX'の間に2つの文字が必要です。 –
@ cc0異なるハイフンを使用しています。 'select ascii( ' - ')、ascii( ' - ')'なぜ、第2のバージョンの継ぎ目がバグか:)。サンプルデータを更新してみてください。 –
@ cc0 - ここで試してみてください。 http://data.stackexchange.com/stackoverflow/query/60628/new –
テキストフィールドの解析を行うために、C#でメソッドを記述することができます。とにかく、あなたが何をしているにしても、あなたはテーブルスキャンエリアにいます。インデックスは機能しません。したがって、SQLによって制限される場合は、統合された.NETランタイムを使用してください。あなたのサンプルデータで
テーブルスキャンが私の目的のために細かいですが、私は今回のCLR統合を使用することから離れて滞在するために期待しています。どんな賢いアイディアですか? – cc0
私はあなたが何かに上だと思う、値がこのようなものになるだろう。 10-1R22345-33PY101-N4 100-1R22345-33PY101Z-N4 1000-1R22345-33PY101ZZ-N4 – cc0