如何用同一个表中另一列的一部分替换一列的内容?

时间:2018-04-11 01:25:54

标签: sql regex

我有/ home / docs / test1的columnA。我希望其他列(columnB)仅填充test1。我想为整张桌子做这件事。

2 个答案:

答案 0 :(得分:0)

你可以在这里使用反向技巧:

UPDATE yourTable
SET columnB = REVERSE(SUBSTRING(REVERSE(columnA),
                                1, CHARINDEX('/', REVERSE(columnA)) - 1));

如果某些路径可能只是一个级别,即没有路径分隔符/存在,那么你想要保留整个路径,那么你可以稍微修改以上内容:

UPDATE yourTable
SET columnB = CASE WHEN CHARINDEX('/', columnA) > 0
                   THEN REVERSE(SUBSTRING(REVERSE(columnA),
                                1, CHARINDEX('/', REVERSE(columnA)) - 1))
                   ELSE columnA END;

这是一个演示,表明上述逻辑有效:

Demo

答案 1 :(得分:0)

如果你需要最后一个元组,那么上面就可以了。但如果需要随机,那么下面的查询将有助于使其分裂。

DECLARE @Var_xml XML

    SELECT @Var_xml = Cast('<root><x>'+ Replace('/home/docs/test1', '/', '</x><x>')+ '</x></root>' AS XML)

    SELECT DISTINCT f.x.value('.', 'VARCHAR(100)') AS tupple
    FROM @Var_xml.nodes('/root/x') f(x)