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实现
实现逻辑:
- 通过JDBC连接SQLite数据库执行查询
- 用
HashSet存储查询到的月份名称,利用Set的元素唯一性特性自动去重 - 将去重后的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
相关产品推荐
相关产品推荐

