2010-05-13 44 views
0

例如。我有桌子T1。它有4列在c1 c2 c3和c4。我有c1作爲id,c2包含組合名稱和地址。 c3和c4是空的。給定的id有多行。假設id = 10有10行。通過從一列中分離值並插入2個差異來更新行。列

我想要的是所有id = 10的行,我想讀取c2,將c2中的值分隔爲名稱和地址,將存儲名稱分別存儲在c3和c4中的地址中。

如何在SQL Server 2005/2008中執行此操作?

感謝

回答

2

嘗試:

UPDATE YourTable 
    SET c3=LEFT(c2,CHARINDEX(' ',c2)) 
     ,c4=RIGHT(c2,LEN(c2)-CHARINDEX(' ',c2)) 
    WHERE [email protected] 

在的問題,方法separate values in c2 as name and address沒有描述的基礎上,找到的第一個空間,所以我只是拆柱C2。 c2 ='abcd efgh'變爲:c3 ='abcd',c4 ='efgh'。

工作樣本:

DECLARE @YourTable table (c1 int,c2 varchar(10),c3 varchar(10),c4 varchar(10)) 
INSERT @YourTable VALUES (1,'aaaa bbbb',null,null) 
INSERT @YourTable VALUES (1,'aaa bbb' ,null,null) 
INSERT @YourTable VALUES (1,'aa bb' ,null,null) 
INSERT @YourTable VALUES (1,'a b'  ,null,null) 
INSERT @YourTable VALUES (2,'222 333' ,null,null) 
INSERT @YourTable VALUES (2,'aaa bbb' ,null,null) 
INSERT @YourTable VALUES (3,'a b'  ,null,null) 

DECLARE @YourIdValue int 
SET @YourIdValue=1 

UPDATE @YourTable 
    SET c3=LEFT(c2,CHARINDEX(' ',c2)) 
     ,c4=RIGHT(c2,LEN(c2)-CHARINDEX(' ',c2)) 
    WHERE [email protected] 

SELECT * FROM @YourTable 

OUTPUT:

c1   c2   c3   c4 
----------- ---------- ---------- ---------- 
1   aaaa bbbb aaaa  bbbb 
1   aaa bbb aaa  bbb 
1   aa bb  aa   bb 
1   a b  a   b 
2   222 333 NULL  NULL 
2   aaa bbb NULL  NULL 
3   a b  NULL  NULL 

(7 row(s) affected) 
+0

非常感謝KM,我想申請邏輯,如:爲C2列讀取所有的字符,直到一些被讀取;直到數字的所有值都在c3中,然後休息直到最後在c4中結束!你可以在你的上述查詢中爲我申請這個 再次提前致謝! – Kris 2010-05-13 14:23:59

+0

另外,如果讀取的數字是字符串中較早的那一行,則不要使用該行。就像下面的或等於6的數字的索引比對該行不做任何事,然後進入下一行,否則拆分列c2中有數字的地方。 – Kris 2010-05-13 14:37:54

+0

範圍蠕變,認真,還會有什麼改變?這些是要知道的重要事情。只是寫一個循環。 – 2010-05-13 14:40:00

相關問題