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

如何在SQL Server中自动获取S3桶中指定日期的文件(含周一特殊处理)

SQL Server自动化生成S3文件查询条件方案

针对你需要自动筛选S3桶中周六、周日、周一上传文件的需求,可通过判断当前日期的星期几,动态生成对应的文件匹配模式,无需手动修改语句。以下是两种实现方式:

方式一:生成逗号分隔的文件模式字符串

适合需要将所有匹配条件合并为单个字符串的场景:

-- 强制设置周一为一周的第一天,避免系统默认日期设置影响判断
SET DATEFIRST 1;

SELECT 
    CASE 
        -- 当前为周一(DATEPART(dw)返回1)时,生成周六和周日的文件模式
        WHEN DATEPART(dw, CURRENT_TIMESTAMP) = 1 THEN 
            STRING_AGG('abc_' + FORMAT(DATEADD(day, -n, CURRENT_TIMESTAMP), 'yyyyMMdd') + '*.csv', ', ')
        -- 周二至周日,仅生成前一天的文件模式
        ELSE 
            'abc_' + FORMAT(DATEADD(day, -1, CURRENT_TIMESTAMP), 'yyyyMMdd') + '*.csv'
    END AS s3_file_patterns
FROM (VALUES (2), (3)) AS days(n);

代码说明

  • SET DATEFIRST 1:确保SQL Server将周一识别为一周的第一天,避免因不同服务器设置(比如默认周日为第一天)导致星期判断错误。
  • 周一逻辑:通过VALUES (2), (3)指定回溯2天(周日)和3天(周六),用STRING_AGG将两个文件模式拼接为逗号分隔的字符串。
  • 非周一逻辑:和你原语句逻辑一致,仅生成前一天的文件模式。

方式二:生成多行文件模式

适合需要逐个遍历匹配文件的场景(周一返回两行,其他日期返回一行):

SET DATEFIRST 1;

SELECT 
    'abc_' + FORMAT(DATEADD(day, days.n, CURRENT_TIMESTAMP), 'yyyyMMdd') + '*.csv' AS s3_file_pattern
FROM (
    SELECT 
        CASE DATEPART(dw, CURRENT_TIMESTAMP)
            WHEN 1 THEN -3  -- 周一取周六的文件(前3天)
            ELSE -1         -- 其他日期取前1天的文件
        END AS n
    UNION ALL
    SELECT 
        CASE DATEPART(dw, CURRENT_TIMESTAMP)
            WHEN 1 THEN -2  -- 周一额外取周日的文件(前2天)
            ELSE NULL
        END AS n
) AS days
WHERE days.n IS NOT NULL;

代码说明

  • 子查询通过UNION ALL构造需要回溯的天数:周一返回-3和-2两个值,其他日期仅返回-1。
  • 外层查询过滤掉NULL值,最终在周一输出两行文件模式,其他日期输出一行。

内容的提问来源于stack exchange,提问作者Anjali Rahangdale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:24:13