0

次の表があるとしましょう。

UserId | メッセージ
------- | -----------------
1 | こんにちは、良い一日を
2 | こんにちは、いい一日でした

すべての{Hi、-have-a-nice-day-I-had}の単語を個別に用意する必要があります。それを行う方法はありますか?データベーステーブル全体から単語をエクスポートしたい場合はどうなりますか?

同様の結果も良いでしょう。

4

2 に答える 2

2

これを試してください:SQLServer2005以降

create table yourtable(RowID int, Layout varchar(200))
INSERT yourtable VALUES (1,'hello,world,welcome,to,tsql')
INSERT yourtable VALUES (2,'welcome,to,stackoverflow')


;WITH SplitSting AS
(
    SELECT
        RowID,LEFT(Layout,CHARINDEX(',',Layout)-1) AS Part
            ,RIGHT(Layout,LEN(Layout)-CHARINDEX(',',Layout)) AS Remainder
        FROM YourTable
        WHERE Layout IS NOT NULL AND CHARINDEX(',',Layout)>0
    UNION ALL
    SELECT
        RowID,LEFT(Remainder,CHARINDEX(',',Remainder)-1)
            ,RIGHT(Remainder,LEN(Remainder)-CHARINDEX(',',Remainder))
        FROM SplitSting
        WHERE Remainder IS NOT NULL AND CHARINDEX(',',Remainder)>0
    UNION ALL
    SELECT
        RowID,Remainder,null
        FROM SplitSting
        WHERE Remainder IS NOT NULL AND CHARINDEX(',',Remainder)=0
)
SELECT part FROM SplitSting ORDER BY RowID

SQLFIDDLEデモ

于 2012-10-29T08:33:39.540 に答える
2

さて、わかりました、ここに行きます。

SQL Serverでは、これを使用できます...

SELECT word = d.value('.', 'nvarchar(max)')
FROM
    (SELECT xmlWords = CAST(
        '<a><i>' + replace([Message], ' ', '</i><i>') + '</i></a>' AS xml) 
        FROM MyMessageTbl) T(c)
    CROSS APPLY c.nodes('/a/i') U(d)

また、MySQLでも、XMLサポート(ExtractValue()など)を使用して同じものを使用できることを願っています。

編集:説明

 - replace([Message], ' ', '</i><i>') replaces e.g. 'my word' with 'my</i><i>word'
 - then I add the beginning and the end of xml -> '<a><i>my</i><i>word</i></a>', so I have a valid xml... and cast it to xml type to be able to do something with it
 - I select from that xml and shred xml nodes '/a/i' it to rows using CROSS APPLY c.nodes('/a/i'); 
   alias rows using U(d), so one 'i' maps to column d (e.g. 'my')
 - d.value('.', 'nvarchar(max)') extracts node content and casts it to character type
于 2012-10-29T08:38:35.867 に答える