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

在R语言中检测两个日期变量是否涵盖任意年份的6月30日

判断日期区间是否包含任意年份6月30日的通用方法

核心逻辑

一条记录符合条件的情况分为两种:

  • 日期区间跨至少两个年份:这种情况必然包含其中某一年的6月30日(比如2021-02到2022-01,包含2021年6月30日)
  • 日期区间在同一年份:需要检查当年的6月30日是否落在start_date和end_date之间

Python(Pandas)实现

先将日期字段转为datetime类型,再通过遍历区间覆盖的年份判断是否存在符合条件的6月30日:

import pandas as pd

# 示例数据集
data = pd.DataFrame({
    'start_date': ['02-25-2021', '07-02-2015', '01-01-2020', '06-28-2023', '12-01-2022'],
    'end_date': ['01-12-2022', '08-25-2015', '12-31-2020', '07-05-2023', '06-30-2023']
})

# 转换日期格式
data['start_date'] = pd.to_datetime(data['start_date'], format='%m-%d-%Y')
data['end_date'] = pd.to_datetime(data['end_date'], format='%m-%d-%Y')

# 定义判断函数
def has_june30(row):
    start_year = row['start_date'].year
    end_year = row['end_date'].year
    # 遍历区间覆盖的所有年份
    for year in range(start_year, end_year + 1):
        june30 = pd.Timestamp(f"{year}-06-30")
        if row['start_date'] <= june30 <= row['end_date']:
            return True
    return False

# 生成结果列
data['includes_june30'] = data.apply(has_june30, axis=1)

print(data)

SQL实现(以MySQL为例)

通过年份对比简化判断逻辑,无需手动指定年份范围:

SELECT 
    start_date,
    end_date,
    CASE
        -- 跨年度直接符合条件
        WHEN YEAR(end_date) > YEAR(start_date) THEN TRUE
        -- 同年度时检查当年6月30日是否在区间内
        WHEN YEAR(end_date) = YEAR(start_date) THEN 
            STR_TO_DATE(CONCAT(YEAR(start_date), '-06-30'), '%Y-%m-%d') BETWEEN start_date AND end_date
        ELSE FALSE
    END AS includes_june30
FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:05:19