0

私はSQLに慣れていないので、無知を許してください。したがって、1つの長いコンマ区切り文字列を持つ1つのフィールドを含む「temp」と呼ばれるテーブルがあります。

Field1
Apples,oranges, pears, berries, melons

上記を、事前定義された列を持つ既存のテーブル「詳細」に挿入したいので、次のようになります。

Field1   Field2   Field3  Field4   Field5
Apples   Oranges  Pears   Berries  Melons 

私はフォーラムを読んでいて、関数を使用する必要があると思いますが、実際にこれを行うにはどうすればよいですか? そして、どの機能が最適ですか?XML関数が最適だと言う人もいますか?

よろしく、

マイケル

4

3 に答える 3

1

これを試して

;WITH Split_Fields (Field, xmlfields)
AS
(
    SELECT Field1 AS Field,
    CONVERT(XML,'<Fields><field>'  
    + REPLACE(Field1,',', '</field><field>') + '</field></Fields>') AS xmlfields
      FROM Table1
)

 SELECT Field,      
 xmlfields.value('/Fields[1]/field[1]','varchar(100)') AS Field1,    
 xmlfields.value('/Fields[1]/field[2]','varchar(100)') AS Field2,
 xmlfields.value('/Fields[1]/field[3]','varchar(100)') AS Field3,    
 xmlfields.value('/Fields[1]/field[4]','varchar(100)') AS Field4,
 xmlfields.value('/Fields[1]/field[5]','varchar(100)') AS Field5
 FROM Split_Fields

SQLFiddle デモ

また

SELECT Field,
xmlfields.value('/Fields[1]/field[1]','varchar(100)') AS Field1, 
xmlfields.value('/Fields[1]/field[2]','varchar(100)') AS Field2, 
xmlfields.value('/Fields[1]/field[3]','varchar(100)') AS Field3, 
xmlfields.value('/Fields[1]/field[4]','varchar(100)') AS Field4, 
xmlfields.value('/Fields[1]/field[5]','varchar(100)') AS Field5 
FROM 
(
SELECT 
Field1 AS Field
,CONVERT(XML,'<Fields><field>' + REPLACE(Field1,',', '</field><field>') + '</field></Fields>') AS xmlfields 
FROM Table1
) Split_Fields

別のテーブル(例:詳細)に挿入するには、以下を試してください

;WITH Split_Fields (Field, xmlfields)
AS
( 
SELECT 
Field1 AS Field
,CONVERT(XML,'<Fields><field>' + REPLACE(Field1,',', '</field><field>') + '</field></Fields>') AS xmlfields 
FROM Table1
) 

INSERT INTO Detail
SELECT 
xmlfields.value('/Fields[1]/field[1]','varchar(100)') AS Field1, 
xmlfields.value('/Fields[1]/field[2]','varchar(100)') AS Field2, 
xmlfields.value('/Fields[1]/field[3]','varchar(100)') AS Field3, 
xmlfields.value('/Fields[1]/field[4]','varchar(100)') AS Field4, 
xmlfields.value('/Fields[1]/field[5]','varchar(100)') AS Field5 
FROM Split_Fields
于 2013-06-11T09:46:44.683 に答える
0

オラクル SQL:

SELECT  REPLACE(SUBSTR(r_str, 1, INSTR(r_str, ',', 1, 1) - 1), ' ') AS r_substr_1
,       REPLACE(SUBSTR(r_str, INSTR(r_str, ',', 1, 1) + 1, INSTR(r_str, ',', 1, 2) - INSTR(r_str, ',', 1, 1) - 1), ' ') AS r_substr_2
,       REPLACE(SUBSTR(r_str, INSTR(r_str, ',', 1, 2) + 1, INSTR(r_str, ',', 1, 3) - INSTR(r_str, ',', 1, 2) - 1), ' ') AS r_substr_3
,       REPLACE(SUBSTR(r_str, INSTR(r_str, ',', 1, 3) + 1, INSTR(r_str, ',', 1, 4) - INSTR(r_str, ',', 1, 3) - 1), ' ') AS r_substr_4
,       REPLACE(SUBSTR(r_str, INSTR(r_str, ',', 1, 4) + 1), ' ')    AS r_substr_5
FROM
(
        SELECT  'Apples, oranges, pears,berries, melons' r_str FROM DUAL
);

Result: Apples  oranges pears   berries melons
于 2013-06-11T10:08:23.697 に答える
0

通常、SQL は構造化データに使用され、カンマ区切りの文字列は外部データ ファイルから取得されます。外部データ ファイルが利用可能な場合は、次のようにデータを読み込みます。または、必要に応じて、元の一時テーブルをデータ ファイルにエクスポートすることを検討してください。

bulk insert tbl_fruits from file.csv with fieldterminator=','
于 2013-06-12T04:50:51.400 に答える