更新的每一行与来自另一列从同一表
问题描述:
一个值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
答
如何:
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)
副评论,但您的表达式提取扩展名将失败所有以下文件名:“foo.xlsx”,“bar.tar.gz”,“baz”。我不确定这是否是故意的。 –
对于我而言,这些扩展(由您提到)将不可用... –