SQL查询中年份硬编码的自动化更新需求
解决SQL硬编码年份自动更新的问题
要实现无需手动修改年份列表、自动纳入2019年及之后所有存在的年份(包括当前年份及后续已入库的年份),可以把硬编码的IN列表替换为年份范围条件,利用数据库内置的当前日期函数动态获取年份。
通用思路
将WHERE MCAL_YEAR IN (2019,2020,...)替换为基于范围的条件,核心逻辑:
- 固定起始年份为2019
- 动态匹配所有大于等于2019的年份(若需限制到当前年份,可添加上限)
分数据库实现代码
MySQL/MariaDB
SELECT DISTINCT PROPHIX_TIME, W_EXCH_RATE_YTD_ME_AVG_G.*, 'EUR' TO_CUR FROM W_MCAL_DAY_D INNER JOIN W_EXCH_RATE_YTD_ME_AVG_G ON MCAL_PERIOD = PD WHERE MCAL_YEAR >= 2019 -- 若仅需包含当前及之前的年份,取消以下注释: -- AND MCAL_YEAR <= YEAR(CURDATE())
SQL Server
SELECT DISTINCT PROPHIX_TIME, W_EXCH_RATE_YTD_ME_AVG_G.*, 'EUR' TO_CUR FROM W_MCAL_DAY_D INNER JOIN W_EXCH_RATE_YTD_ME_AVG_G ON MCAL_PERIOD = PD WHERE MCAL_YEAR >= 2019 -- 若仅需包含当前及之前的年份,取消以下注释: -- AND MCAL_YEAR <= YEAR(GETDATE())
Oracle
SELECT DISTINCT PROPHIX_TIME, W_EXCH_RATE_YTD_ME_AVG_G.*, 'EUR' TO_CUR FROM W_MCAL_DAY_D INNER JOIN W_EXCH_RATE_YTD_ME_AVG_G ON MCAL_PERIOD = PD WHERE MCAL_YEAR >= 2019 -- 若仅需包含当前及之前的年份,取消以下注释: -- AND MCAL_YEAR <= EXTRACT(YEAR FROM SYSDATE)
PostgreSQL
SELECT DISTINCT PROPHIX_TIME, W_EXCH_RATE_YTD_ME_AVG_G.*, 'EUR' TO_CUR FROM W_MCAL_DAY_D INNER JOIN W_EXCH_RATE_YTD_ME_AVG_G ON MCAL_PERIOD = PD WHERE MCAL_YEAR >= 2019 -- 若仅需包含当前及之前的年份,取消以下注释: -- AND MCAL_YEAR <= EXTRACT(YEAR FROM CURRENT_DATE)::INT
补充说明
- 若数据库中已存在未来年份的提前入库数据(比如2025年数据),直接使用
MCAL_YEAR >= 2019即可自动包含这些年份,无需额外修改。 - 若需要严格限制仅包含当前及之前的年份,取消对应注释的上限条件即可,该条件会自动随当前日期更新年份值。
内容的提问来源于stack exchange,提问作者chaitra t
相关产品推荐
相关产品推荐

