如何正确给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
相关产品推荐
相关产品推荐

