2

私は、高レベルのオブジェクトごとに 1 つの列/行に情報の文字列が格納されている SQL テーブルで作業しています。この列には、それらに含まれる基本オブジェクトに関する情報が格納されます。各サブオブジェクトは、テキスト全体で [Report] Report1.... [Report] Report2... のようなタグで示されます。基礎となるオブジェクトとタグが多数あるため、[Report] タグの後の値だけを取得できるようにする必要があります。

テーブル構造

|オブジェクトID|オブジェクトテキスト|

| | 1 | [レポート] レポート 1 [日付] 1 [レポート] レポート 2 [日付] 2 [レポート] レポート 3 [日付] 2|
| | 2 | [レポート] report5 [日付] 1 [レポート] report8 [日付] 2 [レポート] レポート3 [日付] 2|
| | 3 | [レポート] レポート 1 [日付] 1 [レポート] レポート 2 [日付] 2 [レポート] レポート 2 [日付] 2|


これを行う方法がわかりません。CharIndex() と substring() を使用して最初の [Report] タグとその直後の値を受け取ることができますが、各行からすべての値を取得する方法がわかりません。

ObjectTable からのレポートとして Substring(ObjectText,Charindex('[Report]', ObjectText) ,15) を選択

データがテーブルにどのように格納されるかを制御することはできません。個人的には、無関係な情報の長い文字列を同じ行に格納することはありませんでした。

4

2 に答える 2

0

次の関数を使用して実行してみてください。

create function ftStringsBetween
(
    @str varchar(1000),
    @tagStart varchar(50),
    @tagEnd varchar(50)
)
returns table as
return
    with [10](N) as (select 1 union all select 1 union all select 1 union all select 1 union all select 1
        union all select 1 union all select 1 union all select 1 union all select 1 union all select 1),
    [1000](N) as (select 1 from [10] a, [10] b, [10] c),
    v3(N) as (select top (isnull(datalength(@str), 0)) row_number() over (order by @@spid) from [1000]),
    v4(N) as (select N + datalength(@tagStart) from v3 where charindex(@tagStart, @str, N) = N),
    v5(N1, N2) as (select N, N2=isnull(nullif(charindex(@tagEnd, @str, N), 0), datalength(@str) + 1) from v4)
    select Value = substring(@str, N1, N2-N1)
    from v5
GO

次のようにデータに適用できます。

select o.ObjectID, rtrim(ltrim(fsb.Value)) Report
from Objects o
    outer apply ftStringsBetween(o.ObjectText, '[Report]', '[') fsb

そして、次のようになります。

ObjectID    Report
----------- -----------
1           report1
1           report2
1           report3
2           report5
2           report8
2           report3
3           report1
3           report2
3           report2

SQLFiddle サンプル

于 2013-08-27T22:51:14.627 に答える
0

データを配列に分割することに関しては、これに関する最良の情報源の 1 つですSQL Server

http://www.sommarskog.se/arrays-in-sql.html

全面的に優れた読み物。

于 2013-08-27T21:55:27.837 に答える