更新的每一行与来自另一列从同一表

更新的每一行与来自另一列从同一表

问题描述:

一个值I具有的表中的内容的以下示例更新的每一行与来自另一列从同一表

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

我想从Column2用信息来更新Column3,这意味着我想(在这种情况下)从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 
+2

副评论,但您的表达式提取扩展名将失败所有以下文件名:“foo.xlsx”,“bar.tar.gz”,“baz”。我不确定这是否是故意的。 –

+0

对于我而言,这些扩展(由您提到)将不可用... –

如何:

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 

或类似的东西。

试试这个

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

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

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

要提取的一切到最后一个点的右侧,因此与文件名如Foo.designer.cs正常工作您可以使用

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