実行しようとしている SQL ステートメントについて助けが必要です。かなりの量の読み取りとテストを行いましたが、正しい結果が得られないため、ここでリクエストします。
2 つのソースからデータが連結された列からデータを抽出しようとしています。結合の前後でデータを分離したいのですが、結合は「-」(両側にスペースのあるハイフン) で、英数字を使用できます。その「 - 」の前後の文字。これが必要なデータです。複雑さを増すために、一部の行にはデータが結合されていません。つまり、「 - 」がありません。これが満たされている場合は、列の値全体を抽出して BB 側として扱うだけで問題ありません (以下の最初の BB の例を参照)。 .
したがって、終了したら、AA 側 (- の前) と BB 側 (- の後) を分離して、単一の BB の状況を考慮したいと思います。
データを見ると、次のシナリオが発生する可能性があります。
BB<br>
AA - BB<br>
AA-aa - BB<br>
AA - BB-bb-cc<br>
AA-aa - BB-bb-cc<br>
コードを動作させることはできますが、上記のすべてのシナリオで一貫しているとは限りません。適切なコードを提案できますか、または SQL のパフォーマンスに影響を与えないより良い解決策があるかどうかを教えてください。
私がAA側で試してきた例:-
動作:
select substr('AA - BB-bb', 0, instr('AA - BB-bb', ' - ', 1, 1)-1) AS A_NAME
from DUAL;
失敗 (AA のみを取得し、AA-aa を取得しない):
select substr('AA-aa - BB-bb', 0,instr('AA-aa - BB-bb', ' - ', 1, 1)-1) AS A_NAME
from DUAL;
私がBB側で試してきた例:-
失敗:
select SUBSTR('AA-aa - WHENEHEH', INSTR('AA-aa - WHENEHEH',' - ', -1, 1)+1, 100)
B_NAME from dual;
ありがとう、マーク。