【问题标题】:Copy section of data string from one column to another column in SQL在 SQL 中将数据字符串的一部分从一列复制到另一列
【发布时间】:2014-02-14 20:32:39
【问题描述】:

有问题的表和(列)是:

附件(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 这样的所有行上运行/%'

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

【问题讨论】:

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


    【解决方案1】:
    update attachment set
           att_name = Right(att_path, CharIndex('/', Reverse(att_path)) - 1)
     where att_path like '%//bahamas/attachments/images/logos/%'
    

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

    然而,在运行更新之前,我通常会运行一个选择来检查在开发如下语句时是否命中了正确的字符位置,因为通过字符串操作很容易获得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/%'
    

    【讨论】:

    • 更新效果很好!感谢您向我展示这背后的逻辑,我会注意未来。我无法让 Select 语句工作,我假设是因为它需要知道从哪个表中提取...
    • @MattWeick 你完全正确!我添加了 from 子句。
    • 感谢您的确认!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多