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

SQL提取日期列月份方法及Java转无重复ArrayList实现

解决方案

SQL查询语法(适用SQLite数据库,匹配.db后缀文件场景)

你存储的Date列为DD MMMM YYYY格式的字符串,可直接用SQLite内置的日期函数提取年份和月份,SQL层面可直接加DISTINCT实现去重减少后续处理量:

-- 提取所有年份对应的不重复月份,按时间顺序排序
SELECT DISTINCT
  STRFTIME('%Y', DATE(Date)) AS 统计年份,
  STRFTIME('%B', DATE(Date)) AS 月份名称
FROM TableHome
-- 可加WHERE语句筛选指定年份,例:筛选2021年数据
-- WHERE STRFTIME('%Y', DATE(Date)) = '2021'
ORDER BY 统计年份, STRFTIME('%m', DATE(Date)) ASC;

语法说明:

  • DATE(Date):将字符串格式的日期转换为SQLite可识别的日期类型
  • STRFTIME('%Y', 日期):提取4位年份
  • STRFTIME('%B', 日期):提取完整英文月份名称
  • STRFTIME('%m', 日期):提取数字月份,用于排序避免月份按字母顺序乱序

Java转换为无重复ArrayList实现

实现逻辑:

  1. 通过JDBC连接SQLite数据库执行查询
  2. 用HashSet存储查询到的月份名称,利用Set的元素唯一性特性自动去重
  3. 将去重后的Set直接转换为ArrayList,可按需增加排序逻辑

代码示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MonthQuery {
    public static void main(String[] args) {
        // 替换为你的DatabaseHome.db文件实际路径
        String dbUrl = "jdbc:sqlite:/your/file/path/DatabaseHome.db";
        Set<String> monthSet = new HashSet<>();
        
        // 按需修改SQL语句,这里示例查询2021年的所有月份
        String querySql = "SELECT DISTINCT STRFTIME('%B', DATE(Date)) AS month_name FROM TableHome WHERE STRFTIME('%Y', DATE(Date)) = '2021'";

        // 自动关闭资源的try-with-resources写法
        try (
            Connection conn = DriverManager.getConnection(dbUrl);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(querySql);
        ) {
            while (rs.next()) {
                monthSet.add(rs.getString("month_name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 转换为无重复元素的ArrayList
        ArrayList<String> distinctMonthList = new ArrayList<>(monthSet);

        // 可选:按1-12月的时间顺序排序,避免按字母顺序排序
        List<String> monthOrder = List.of("January", "February", "March", "April", "May", "June", 
                "July", "August", "September", "October", "November", "December");
        distinctMonthList.sort((m1, m2) -> Integer.compare(monthOrder.indexOf(m1), monthOrder.indexOf(m2)));

        // 测试输出
        System.out.println(distinctMonthList);
    }
}

注意:运行前需引入SQLite对应的JDBC驱动到项目依赖中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:24:01