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中執行此操作?
感謝
例如。我有桌子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中執行此操作?
感謝
嘗試:
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)
非常感謝KM,我想申請邏輯,如:爲C2列讀取所有的字符,直到一些被讀取;直到數字的所有值都在c3中,然後休息直到最後在c4中結束!你可以在你的上述查詢中爲我申請這個 再次提前致謝! – Kris 2010-05-13 14:23:59
另外,如果讀取的數字是字符串中較早的那一行,則不要使用該行。就像下面的或等於6的數字的索引比對該行不做任何事,然後進入下一行,否則拆分列c2中有數字的地方。 – Kris 2010-05-13 14:37:54
範圍蠕變,認真,還會有什麼改變?這些是要知道的重要事情。只是寫一個循環。 – 2010-05-13 14:40:00