2

Microsoft SQL Server 2008

2つのテーブルがあります。_1つには、区切られたデータを含む列があります

例:

Y_21_CA
<BR>
such that:
Yes/No_Age_State

この列のデータを解析して、値ごとに個別の列を持つ別のテーブルに挿入する必要があります。テーブルAに上記の例のように1つの列が含まれているが、テーブルBには3つの列が含まれているとしますYesOrNo, Age, usState

これを行う最も簡単な方法は何ですか?私は次のようなことを試みました:

UPDATE TableA
SET YesOrNo = SUBSTRING (TableB.Column1, 1, 1)

しかしSUBSTRING、表現を取るだけです。私は本当にここでいくつかのガイダンスが必要です。私はSQLの第一人者ではないので、これを理解しようとして壁に頭をぶつけてきました。構文は問題なく理解できますが、存在するいくつかのメソッドを認識していない可能性があります。ありがとう

4

2 に答える 2

5

Charindexハードコーディングせずに「_」を使用する一般的なソリューション

declare @s varchar(10) = 'Y_21_CA'   

SELECT LEFT(@s, CHARINDEX('_',@s,1)-1) YN, 
       SUBSTRING(@s, CHARINDEX('_',@s,1)+1,  
                 CHARINDEX('_',@s,CHARINDEX('_',@s,1)) ) Age,
       RIGHT(@s, CHARINDEX('_',reverse(@s),1)-1) State 

--Results
Y   21   CA

このロジックを他のクエリで頻繁に使用することが予想される場合は、SELECTステートメントをインラインTVFにすることができます。次に、次のように更新で使用できるようになります。

UPDATE b
SET YesOrNo = x.YN,
    Age = x.Age,
    State = x.State
FROM TableB b
INNER JOIN TableA a ON b.ID = a.ID
CROSS APPLY ThreeColumnSplit(a.S) x;

これがSQLFiddleでの「ライブ」デモです。(SQL Server 2012エンジンの使用を気にしないでください。これは、Fiddleの2008インスタンスが現在ダウンしているように見え、使用できないためです。スクリプトにはSQL Server 2012固有のものはありません。)

于 2013-01-03T22:16:14.187 に答える
2

あなたは以下を使うことができるはずです、私はあなたがのINSERT代わりに欲しいと思いますUPDATE

データを取得するためのSELECTステートメントは次のとおりです。

select substring(yourCol, 1, 1) YesOrNo,
  substring(yourcol, 3, len(yourcol)-5) Age,
  right(yourCol, 2) usState
from tableA;

SQL FiddlewithDemoを参照してください

次に、INSERTステートメントは次のとおりです。

insert into tableB (YesOrNo, Age, usState)
select substring(yourCol, 1, 1) YesOrNo,
  substring(yourcol, 3, len(yourcol)-5) Age,
  right(yourCol, 2) usState
from tableA;

SQL FiddlewithDemoを参照してください

注:YesOrNoこれは、列が常に1文字のみであり、が常に2文字であることを前提としていますusState

于 2013-01-03T22:09:24.403 に答える