簡體   English   中英

將一列中的值解析為另一個表中的多列

[英]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;

請參閱SQL Fiddle with Demo

然后, 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 Fiddle with Demo

注意:這假定YesOrNo列將始終只有一個字符,並且usState將始終具有2個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM