2012-12-18 85 views
6

一個值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

對於我而言,這些擴展(由您提到)將不可用... –

回答

15

如何:

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

試試這個

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

要提取的最後4個字符的最簡單方法是

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

要提取的一切到最後一個點的右側,因此與文件名如Foo.designer.cs正常工作您可以使用

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