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

如何正确给reference_date变量赋值以实现指定规则的参考日期获取

实现方案

你原有代码的报错和两个问题有关:一是date_part的参数dw需要加引号,二是SELECT INTO变量赋值的语法需要匹配你使用的数据库类型。以下是不同场景下的可运行实现:


  • 通用兼容方案(适配所有支持CTE的主流数据库,无需声明变量)
    把参考日期存入公共表达式,后续所有查询都可以关联复用,无需关心数据库变量语法:
WITH config AS (
    SELECT
        CASE
            -- date_part('dw', 日期)返回规则:周日=1、周一=2、周二=3、周三=4、...、周六=7
            WHEN DATE_PART('dw', CURRENT_DATE) <= 3
            THEN CURRENT_DATE - (DATE_PART('dw', CURRENT_DATE)::INTEGER + 1)
            ELSE CURRENT_DATE
        END AS reference_date
)
-- 后续业务查询直接关联config表取参考日期即可,示例:
SELECT reference_date FROM config;

  • PostgreSQL 变量赋值方案
    如果使用PostgreSQL,可在PL/pgSQL块中声明变量使用:
DO $$
DECLARE
    reference_date DATE;
BEGIN
    SELECT
        CASE
            WHEN DATE_PART('dw', CURRENT_DATE) <= 3
            THEN CURRENT_DATE - (DATE_PART('dw', CURRENT_DATE)::INTEGER + 1)
            ELSE CURRENT_DATE
        END INTO reference_date;
    -- 此处可编写后续逻辑直接调用reference_date变量
    RAISE NOTICE '生成的参考日期为:%', reference_date;
END $$;

  • MySQL 变量赋值方案
    如果使用MySQL,可直接用用户变量实现:
-- WEEKDAY返回规则:周一=0、周二=1、周三=2、周四=3...
SELECT
    @reference_date := CASE
        WHEN WEEKDAY(CURDATE()) < 2 THEN SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 3)
        ELSE CURDATE()
    END;

-- 查看/调用变量
SELECT @reference_date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:06:00