【问题标题】:SQL: Rename duplicate filenames by adding 1,2,3... before extensionSQL:通过在扩展名前添加 1,2,3... 来重命名重复的文件名
【发布时间】:2011-12-23 03:21:32
【问题描述】:

我试图弄清楚如何重命名存储文件名的列的内容。目前该字段中有重复项,我试图通过在每个重复项后添加一个增量整数来重命名,例如

ID       | FILENAME
----------------------
1        | file1.ext
2        | file2.ext
3        | file1.ext
4        | file1.ext
5        | file3.ext
6        | file3.ext
7        | file4.ext

所以在上面的例子中,我希望以下是唯一的:

ID       | FILENAME
----------------------
1        | file1.ext
3        | file1.ext
4        | file1.ext
5        | file3.ext
6        | file3.ext

通过将文件名更改为:

ID       | FILENAME
----------------------
1        | file1-1.ext
3        | file1-2.ext
4        | file1-3.ext
5        | file3-1.ext
6        | file3-2.ext

我知道如何找到重复项,但我不确定如何在扩展之前添加增量或如何首先增加计数。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql duplicates rename increment


    【解决方案1】:

    使用window function row_number() 获取号码,使用replace 获取string manipulation
    您没有披露您的 RDBMS。以下查询在 PostgreSQL 9.0 上进行了测试。 MySQL 不支持窗口函数,其他大多数大型 RDBMS 都支持。

    重命名所有文件名

    SELECT id
          ,replace(filename, '.',  
                   '-'
                   || row_number() OVER (PARTITION BY filename ORDER BY id)
                   || '.')
    FROM   mytbl
    

    仅重命名重复的文件名

    SELECT id
          ,CASE WHEN (count(*) OVER (PARTITION BY filename)) > 1 THEN
              replace(filename, '.',  
                      '-'
                      || row_number() OVER (PARTITION BY filename ORDER BY id)
                      || '.')
           ELSE filename END AS filename
    FROM   mytbl;
    

    使用额外请求的功能进行编辑

    此版本适用于名称中包含多个点或不包含点的情况。在 PostgreSQL 9.0 中测试。

    SELECT id
          ,CASE WHEN (count(*) OVER (PARTITION BY filename)) > 1 THEN
              regexp_replace(filename
                  -- pick the longest string from the start not 
                 ,'^([^.]*)'containing a '.'
                  -- and replace it with itself + row_number
                 ,E'\\1-' || row_number() OVER (PARTITION BY filename ORDER BY id))
           ELSE filename END AS filename
    FROM   mytbl
    

    【讨论】:

    • 感谢 Erwin,我正在使用 IBM DB2,上面的内容似乎很好用。只是为了增加一点复杂性:) 1. 有些文件可能有一个“。”以他们的名义,以及扩展名,例如'some.file.ext' 2. 有些文件可能没有扩展名。我是否只需要在案件的基础上进行积累?
    • @Brian 最佳字符串操作很大程度上取决于文件名的实际分布和 DB2 中可用的函数。我添加了另一个版本,在 PostgreSQL 9.0 中执行你提到的所有事情
    猜你喜欢
    • 2021-04-02
    • 2014-03-07
    • 2019-07-29
    • 2014-06-12
    • 2022-06-10
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多