0

T-SQL // SQL Server 2008 R2を使用して、かなり些細なことだと思うことをしたいのですが、方法がわかりません。

私が Java、C#、C++ などを使っていたら、次のようにします。

  1. 文字列内で「123」が最初に出現する位置を見つける
  2. その位置から部分文字列操作を実行し、次の 50 文字を取得します

したがって、SQL Server では、基本的には次のようになります。

  1. 列 (X) にその文字列が含まれるすべての行を検索します (基本的には LIKE 句)。
  2. 上記の文字列の位置から始まる列から 50 文字を返します。

どうにかしてこれを行うことはできますか? XML 列を nvarchar(max) にキャストし、like 操作を実行し、部分文字列操作を実行できますが、そもそも列内の上記の文字列の位置を取得する方法がわかりません。


コメントでリクエストされたサンプル コンテンツ

CREATE TABLE SampleTable(xmlData xml);

SampleTable の xmlData 列が次の場合、値が 1 であると仮定します。Þデバッグの目的で、面白い Unicode 文字から文字列を50 文字前方 (または 50 文字未満の場合はファイルの最後)に抽出したいと思います。

<RootNode>
    <Row>
        <NestedNode1>
            some text.
        </NestedNode1>

        <NestedNode2>
            123456
        </NestedNode2>

        <NestedNode3>
            Þ Some crazy name with unicode letters. Þ
        </NestedNode3>
    </Row>
</RootNode>

4

1 に答える 1

2

CHARINDEXをお探しですか?

;WITH CTE AS(
    SELECT CAST (xmlData as nvarchar(max)) as X
    FROM SampleTable
)
SELECT SUBSTRING(X,CHARINDEX(N'Þ',X),50) as [String]
FROM CTE
WHERE CHARINDEX(N'Þ',X)>0
于 2012-05-30T18:15:10.480 に答える