You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL识别PDF文件表新旧命名数据,确定待保留与删除条目

核心判断规则

  • 符合新命名规则的文件判定条件:文件名包含_R_数字或_C_数字片段,SQL中用LIKE匹配时,下划线需要用方括号转义避免被识别为通配符
  • 仅当同一个PAR分组下存在至少1个符合新规则的文件时,该分组内所有不符合新规则的文件标记为待删除;如果分组下无符合新规则的文件,所有文件均保留,避免误删

实现SQL示例(适配SQL Server,兼容SSIS集成场景)

验证用查询语句

可先运行该语句核对标记结果是否符合预期:

SELECT 
    PAR,
    ORIGFILENAME,
    -- 标记是否符合新命名规则:1=是,0=否
    CASE WHEN ORIGFILENAME LIKE '%[_]R_[0-9]%' OR ORIGFILENAME LIKE '%[_]C_[0-9]%' THEN 1 ELSE 0 END AS IS_NEW_FILE,
    -- 标记是否需要删除:1=待删除,0=保留
    CASE 
        WHEN MAX(CASE WHEN ORIGFILENAME LIKE '%[_]R_[0-9]%' OR ORIGFILENAME LIKE '%[_]C_[0-9]%' THEN 1 ELSE 0 END) OVER (PARTITION BY PAR) = 1
            AND ORIGFILENAME NOT LIKE '%[_]R_[0-9]%' AND ORIGFILENAME NOT LIKE '%[_]C_[0-9]%'
        THEN 1 
        ELSE 0 
    END AS TO_DELETE
FROM 你的PDF清单表名

表更新语句

确认逻辑无误后,可直接给表添加标记列并更新结果:

-- 新增删除标记列(仅需执行一次)
ALTER TABLE 你的PDF清单表名 ADD TO_DELETE TINYINT DEFAULT 0;

-- 执行标记更新
UPDATE t
SET TO_DELETE = 1
FROM 你的PDF清单表名 t
WHERE 
    -- 当前文件为旧规则文件
    t.ORIGFILENAME NOT LIKE '%[_]R_[0-9]%' 
    AND t.ORIGFILENAME NOT LIKE '%[_]C_[0-9]%'
    -- 对应PAR分组下存在新规则文件
    AND EXISTS (
        SELECT 1 FROM 你的PDF清单表名 t2
        WHERE t2.PAR = t.PAR
        AND (t2.ORIGFILENAME LIKE '%[_]R_[0-9]%' OR t2.ORIGFILENAME LIKE '%[_]C_[0-9]%')
    )

注意事项

  1. 执行更新操作前务必先运行查询语句核对标记结果,确认符合预期后再执行更新
  2. 逻辑默认如果某个PAR下没有符合新规则的文件,不会标记任何文件删除,符合无新文件时保留存量旧文件的业务要求
  3. 该逻辑可以直接集成到SSIS包的SQL任务节点中,每周定时执行即可

内容的提问来源于stack exchange,提问作者Eric G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:36:00