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

DataFrame日期断点统计与MySQL日期筛选技术求助

CASE 2:MySQL 提取包含指定日期的行

针对同结构的MySQL表,要高效筛选包含大于2023-04-18日期的行,推荐用JSON_TABLE(MySQL 8.0+)或递归CTE拆分日期串,避免循环:

方法一:JSON_TABLE(高效推荐)

利用JSON函数拆分逗号分隔字符串,再匹配符合条件的日期:

SELECT DISTINCT t.*
FROM your_table t
JOIN JSON_TABLE(
    -- 将日期串转为JSON数组格式
    CONCAT('["', REPLACE(t.date_str, ',', '","'), '"]'),
    '$[*]' COLUMNS (single_date VARCHAR(20) PATH '$')
) sd
WHERE 
    -- 匹配4位年份的日期(如2023-4-18)
    (STR_TO_DATE(sd.single_date, '%Y-%c-%e') >= '2023-04-18' 
     AND STR_TO_DATE(sd.single_date, '%Y-%c-%e') IS NOT NULL)
    OR 
    -- 匹配2位年份的日期(如20-5-17)
    (STR_TO_DATE(sd.single_date, '%y-%c-%e') >= '2023-04-18' 
     AND STR_TO_DATE(sd.single_date, '%y-%c-%e') IS NOT NULL);

方法二:递归CTE(兼容低版本MySQL)

通过递归拆分日期串,再筛选符合条件的行:

WITH RECURSIVE split_dates AS (
    SELECT 
        id, -- 替换为你的表主键字段
        date_str,
        SUBSTRING_INDEX(date_str, ',', 1) AS single_date,
        SUBSTRING(date_str, LENGTH(SUBSTRING_INDEX(date_str, ',', 1)) + 2) AS remaining_dates
    FROM your_table
    WHERE date_str IS NOT NULL AND date_str != ''
    UNION ALL
    SELECT 
        id,
        date_str,
        SUBSTRING_INDEX(remaining_dates, ',', 1),
        SUBSTRING(remaining_dates, LENGTH(SUBSTRING_INDEX(remaining_dates, ',', 1)) + 2)
    FROM split_dates
    WHERE remaining_dates IS NOT NULL AND remaining_dates != ''
)
SELECT DISTINCT t.*
FROM your_table t
JOIN split_dates sd ON t.id = sd.id
WHERE 
    (STR_TO_DATE(sd.single_date, '%Y-%c-%e') >= '2023-04-18' 
     AND STR_TO_DATE(sd.single_date, '%Y-%c-%e') IS NOT NULL)
    OR 
    (STR_TO_DATE(sd.single_date, '%y-%c-%e') >= '2023-04-18' 
     AND STR_TO_DATE(sd.single_date, '%y-%c-%e') IS NOT NULL);

说明

  • STR_TO_DATE用%Y-%c-%e匹配无前置零的日期格式(如2023-4-18),%y-%c-%e匹配两位年份的日期
  • DISTINCT确保原表每行只返回一次,避免拆分后重复输出
  • JSON_TABLE性能优于递归CTE,优先使用(需MySQL 8.0及以上版本)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:39:54