xml データを格納するために使用されるテーブルに varchar 列があります。ええ、使用すべき xml データ型があることは知っていますが、これは xml データ型が利用可能になる前に設定されたと思うので、今のところ varchar を使用する必要があります。:)
格納されたデータは次のようになります。
<xml filename="100100_456_484351864768.zip"
event_dt="10/5/2009 11:42:52 AM">
<info user="TestUser" />
</xml>
ファイル名を解析して、2 つのアンダースコアの間の数字を取得する必要があります。この場合は「456」になります。ファイル名の最初の部分の長さは「変更すべきではありません」が、中間の数字は変更されます。最初の部分の長さが変わった場合に機能する解決策が必要です(「変更しないでください」は常に変更されることを意味しているように見えるため、変更されることはわかっています)。
今のところ、XQuery を使用してファイル名を取得しています。これはおそらく単純な文字列操作よりも優れていると考えたからです。これを行うために文字列を xml にキャストしましたが、私は XQuery の専門家ではないので、もちろん問題が発生しています。XQuery (substring-before) の関数を見つけましたが、機能させることができませんでした (その関数が SQL Server で機能するかどうかさえわかりません)。これを簡単に行うための XQuery 関数があるかもしれませんが、あるとしても私は知りません。
したがって、次のようなクエリを使用して、テーブルからファイル名を取得します。
select CAST(parms as xml).query('data(/xml/@filename)') as p
from Table1
これから、これを文字列にキャストしてから、 instring または charindex 関数を実行してアンダースコアがどこにあるかを把握し、そのすべてを部分文字列関数にカプセル化して部分を選択できると想定します私は欲しい。これに深く入り込まなくても、最終的にはこの方法で実行できると確信していますが、もっと簡単な方法が必要であることはわかっています。この方法では、SQL ステートメントに読み取り不可能な巨大なフィールドが作成され、それを関数に移動したとしても、何が起こっているのかを理解しようとすると混乱します。
単純な文字列操作のように見えるので、これよりも簡単な方法があると確信しています。おそらく、誰かが私を正しい方向に向けることができます。ありがとう