将数据字符串的一部分从SQL中的一列复制到另一列

时间:2014-01-24 01:20:11

标签: sql sql-server-2008 replace sql-update

有问题的表格和(列)是:

附件(att_name和att_path)

我拨打此电话选择我要更新的信息:

select * from attachment
where att_path like '%//bahamas/attachments/images/logos/%'

我需要使用上面路径中的文件名更新att_name列。例如,如果SQL找到“// bahamas / attachments / images / logos / ABCDE.tif ”,我需要SQL来更新att_name以替换当前的任何内容并插入 ABCDE.tif

我在一个项目上尝试了多个不同的测试,我似乎无法让我的SQL正确实现全局调用,其中此更新在所有行上运行,其中att_path像'%// bahamas / attachments / images / logos /%'

非常感谢任何建议/帮助。

1 个答案:

答案 0 :(得分:1)

update attachment set
       att_name = Right(att_path, CharIndex('/', Reverse(att_path)) - 1)
 where att_path like '%//bahamas/attachments/images/logos/%'

应该做你想做的事。 从末尾开始反转然后搜索第一次出现的/

然而,在运行更新之前,我通常会运行一个select来检查在开发如下所示的语句时是否找到了正确的字符位置,因为使用字符串操作很容易得到off-by-one errors

select att_path, Right(att_path, CharIndex('/', Reverse(att_path)) - 1)
  from attachment
 where att_path like '%//bahamas/attachments/images/logos/%'