2012-12-18 22 views
6

Mam następujący przykład zawartości tabeliAktualizacja każdy wiersz o wartości od innej kolumny z tej samej tabeli

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

Chcę zaktualizować Column3 z informacjami od Column2, co oznacza, chcę (w tym przypadku) wyodrębnij rozszerzenie z Column2 i umieść je w Column3.

Chcę wynik wyglądać

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

Jak to zrobić za pomocą instrukcji UPDATE?

wiem jak wydobyć rozszerzenia:

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

Komentarz boczny, ale wyrażenie wyodrębniania rozszerzenia nie powiedzie się wszystkie następujące nazwy plików: "foo.xlsx", "bar.tar.gz", "baz". Nie jestem pewien, czy to jest zamierzone. –

+0

Z mojej strony te rozszerzenia (wymienione przez ciebie) nie będą dostępne ... –

Odpowiedz

15

Jak ten temat:

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

W razie potrzeby, można również zawierać WHERE klauzuli aby ograniczyć wiersze są aktualizowane, np:

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

lub coś w tym stylu.

1

spróbować

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

aby wyodrębnić ostatnich 4 znaków Najprostszym sposobem jest

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

Aby wydobyć wszystko na prawo od ostatniej kropki i tak działa poprawnie z nazwami plików, takich jak Foo.designer.cs można użyć:

Powiązane problemy