![](/img/trans.png)
[英]insert statement one column from another table rest of the columns is values
[英]Parse values from one column into multiple columns in another table
Microsoft SQL Server 2008
我有兩張桌子。 其中一個列中包含_
分隔的數據
例:
Y_21_CA
<BR>
such that:
Yes/No_Age_State
我需要解析此列中的數據並將其插入另一個表中,該表具有每個值的單獨列。 假設表A包含一列,如上例所示,但表B包含三列, YesOrNo, Age, usState
。
最簡單的方法是什么? 我嘗試過這樣的事情:
UPDATE TableA
SET YesOrNo = SUBSTRING (TableB.Column1, 1, 1)
但SUBSTRING
只接受一個表達式。 我真的只是在這里需要一些指導,因為我不是SQL專家,所以我一直在想辦法解決這個問題。 我可以弄清楚語法沒有問題,但也許我不知道存在的某些方法。 謝謝
一個通用的解決方案,使用'_'的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;
這是SQL Fiddle的“實時”演示 。 (請不要介意它使用SQL Server 2012引擎。這僅是因為Fiddle的2008實例目前已關閉並且無法使用。腳本中沒有特定於SQL Server 2012的內容。)
您應該能夠使用以下內容,我認為您需要INSERT
而不是UPDATE
。
用於獲取數據的SELECT
語句為:
select substring(yourCol, 1, 1) YesOrNo,
substring(yourcol, 3, len(yourcol)-5) Age,
right(yourCol, 2) usState
from tableA;
然后, 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;
注意:這假定YesOrNo
列將始終只有一個字符,並且usState
將始終具有2個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.