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

关于IF/CASE语句的实现需求:跨年份按日期区间标记Y/N

日期区间标记解决方案

核心思路是剥离日期的年份信息,统一将所有日期的MM-DD部分转换到同一年(比如2000年,非闰年不影响9-12月的区间判断),再和基准区间(每年的9月1日到当前日期的MM-DD)做比较,从而标记Y/N。以下是不同工具的具体实现:

Excel 实现

假设日期数据在A列,直接用公式批量计算:

=IF(AND(DATE(2000,MONTH(A2),DAY(A2))>=DATE(2000,9,1),DATE(2000,MONTH(A2),DAY(A2))<=DATE(2000,MONTH(TODAY()),DAY(TODAY()))),"Y","N")
  • 逻辑:把所有日期的月日拼到2000年,这样就能直接比较月日区间,完全忽略原年份的干扰。

SQL 实现

MySQL 版本

SELECT 
  date_col,
  IF(
    STR_TO_DATE(CONCAT('2000-', DATE_FORMAT(date_col, '%m-%d')), '%Y-%m-%d') 
    BETWEEN '2000-09-01' 
    AND STR_TO_DATE(CONCAT('2000-', DATE_FORMAT(CURDATE(), '%m-%d')), '%Y-%m-%d'),
    'Y',
    'N'
  ) AS flag
FROM your_table;

PostgreSQL 版本

SELECT 
  date_col,
  CASE
    WHEN TO_DATE(TO_CHAR(date_col, 'MM-DD'), 'MM-DD') 
         BETWEEN TO_DATE('09-01', 'MM-DD') 
         AND TO_DATE(TO_CHAR(CURRENT_DATE, 'MM-DD'), 'MM-DD')
    THEN 'Y'
    ELSE 'N'
  END AS flag
FROM your_table;

Python Pandas 实现

先确保日期列是datetime类型,再进行计算:

import pandas as pd

# 转换日期列为datetime类型
df['date_col'] = pd.to_datetime(df['date_col'])

# 获取当前日期的月日字符串
current_mmdd = pd.Timestamp.now().strftime('%m-%d')

# 生成用于比较的统一年份日期
df['compare_date'] = pd.to_datetime('2000-' + df['date_col'].dt.strftime('%m-%d'))
current_compare_date = pd.to_datetime('2000-' + current_mmdd)
sept_01_compare = pd.to_datetime('2000-09-01')

# 标记Y/N
df['flag'] = df['compare_date'].apply(lambda x: 'Y' if sept_01_compare <= x <= current_compare_date else 'N')

# 清理中间辅助列
df = df.drop('compare_date', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:45:35