通过从一列中分离值并插入到2 diff中来更新行。列

时间:2010-05-13 13:53:23

标签: sql-server sql-server-2005 tsql

例如。我有桌子T1。其中有4列c1 c2 c3和c4。我有c1作为id,c2包含组合名称和地址。 c3和c4是空的。给定id有多行。假设id = 10有10行。

我想要的是id = 10的所有行,我想读取c2,将c2中的值分别作为名称和地址,将名称存储在c3中,将地址存储在c4中。

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

由于

1 个答案:

答案 0 :(得分:2)

尝试:

UPDATE YourTable
    SET c3=LEFT(c2,CHARINDEX(' ',c2))
       ,c4=RIGHT(c2,LEN(c2)-CHARINDEX(' ',c2))
    WHERE c1=@YourIdValue

在问题中,没有描述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 c1=@YourIdValue

SELECT * FROM @YourTable

输出:

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)