使用同一表中另一列的值更新每一行

时间:2012-12-18 08:40:45

标签: sql sql-server-2008

我有以下表格内容的例子

+ Column1 | Column2 | Column3 +
+---------|---------|---------+
+   1     | val.txt |         +
+   2     | test.xls|         +
+   3     | abc.dwg |         +
+   4     | y.txt   |         +
+---------|---------|---------+

我想使用Column3中的信息更新Column2,这意味着我希望(在这种情况下)从Column2中提取扩展名并将其放入Column3

我希望结果看起来像

+ Column1 | Column2 | Column3 +
+---------|---------|---------+
+   1     | val.txt |   .txt  +
+   2     | test.xls|   .xls  +
+   3     | abc.dwg |   .dwg  +
+   4     | y.txt   |   .txt  +
+---------|---------|---------+

如何使用UPDATE声明执行此操作?

我知道如何提取扩展程序:

SUBSTRING(Column2, LEN(Column2)-3, LEN(Column2)) AS Extension

3 个答案:

答案 0 :(得分:17)

这个怎么样:

UPDATE dbo.YourTable
SET Column3 = SUBSTRING(Column2, LEN(Column2)-3, LEN(Column2)) 

如果需要,您还可以包含WHERE子句来限制要更新的行,例如:

UPDATE dbo.YourTable
SET Column3 = SUBSTRING(Column2, LEN(Column2)-3, LEN(Column2)) 
WHERE Column3 IS NULL

或类似的东西。

答案 1 :(得分:1)

试试这个

 UPDATE dbo.YourTable
    SET Column3 =SUBSTRING(Column2,CHARINDEX('.',Column2,0),(LEN(Column2)-CHARINDEX('.',Column2,0)+1))

答案 2 :(得分:0)

要提取最后4个字符,最简单的方法是

UPDATE dbo.YourTable
SET Column3 = RIGHT(Column2,4);

要提取最后一个点右侧的所有内容,以便正确使用文件名,例如Foo.designer.cs,您可以使用

UPDATE dbo.YourTable
SET    Column3 = '.' + RIGHT(Column2, CHARINDEX('.', REVERSE('.' + Column2)) - 1)