簡體   English   中英

SQL Java選擇本月添加的所有記錄

[英]SQL java Select all the records that added in this month

我需要在表中顯示本月創建的所有記錄。 格式為mmm dd yyyy,使用java和sqlite

我的數據庫中有“開始”列,如果日期的月份是本月,則它必須出現在表中。

我在下面嘗試了此代碼,請指導我。

我需要在一個月內選擇所有記錄。

  try {
   SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
   Calendar c = Calendar.getInstance();
   c.set(Calendar.DAY_OF_MONTH, 1);
   c = Calendar.getInstance(); // reset
   String today = dateFormat.format(c.getTime());

   int month = c.get(Calendar.MONTH) + 1;

   String sql = "SELECT Firstname FROM Members_Tbl WHERE End = '" + month 
   + "'";
   pst = con.prepareStatement(sql);
   rs = pst.executeQuery();
   monthlyreports.setModel(DbUtils.resultSetToTableModel(rs));

   rs.close();
   } catch (Exception e) {
   JOptionPane.showMessageDialog(null, e);
    }

java.time

我尚未測試(尚未安裝SQLite),但我相信以下應該可以工作:

    DateTimeFormatter monthPatternFormatter = DateTimeFormatter.ofPattern("MMM '%' uuuu", Locale.ENGLISH);
    YearMonth currentMonth = YearMonth.now(ZoneId.of("Australia/Melbourne"));
    String sql = "SELECT Firstname FROM Members_Tbl WHERE Start like ?;";
    pst = con.prepareStatement(sql);
    String monthPattern = currentMonth.format(monthPatternFormatter);
    pst.setString(1, monthPattern);
    rs = pst.executeQuery();

當您說數據庫中的格式為mmm dd yyyy時,我相信您的意思,例如Apr 11 2019 我假設英語月份為縮寫。

不過,我建議將ISO 8601標准日期字符串存儲在數據庫中。 它像2019-04-11 那么您的格式模式字符串將是uuuu-MM-'%' 或者,您可以使用<=<比較字符串,這可能會更有效。

您使用的日期/時間類SimpleDateFormatCalendar設計很差,很幸運,它已經過時了。 相反,我使用的是java.time,這是現代的Java日期和時間API。 與之合作真是太好了。

鏈接

您可以使用(參見下文) SQLite substr核心功能 :-

String sql = "SELECT Firstname FROM Members_Tbl WHERE substr(Start,1,2) = '" + month + "'";

但是將包括所有年份。

所以你可能想要:-

String sql = "SELECT Firstname FROM Members_Tbl WHERE substr(Start,1,2) = '" + month + "' AND substr(Start,7,4) = '" + the_respective_year + "'";

筆記

如果MM或DD並非始終為2個字符(例如1/9/2019),則上述內容將無法正常工作。

推薦的方法是以YYYY-MM-DD格式(或鏈接中的任何時間字符串格式)存儲日期。 然后,您可以使用SQLite DateTime函數。

如果要比較月份,則SimpleDateFormat對象必須與表中存儲的格式匹配。
您還必須比較年份而不只是月份。
在sql語句中使用占位符而不是串聯參數總是更安全:

SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd yyyy");
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 1);
c = Calendar.getInstance(); // reset
String today = dateFormat.format(c.getTime());
String sql =
        "SELECT Firstname FROM Members_Tbl WHERE " +
        "substr(Start, 1, 3) = ? AND substr(Start, 8, 4) = ?";

pst = con.prepareStatement(sql);
pst.setString(1, today.substring(0, 3));
pst.setString(2, today.substring(7));
rs = pst.executeQuery();
monthlyreports.setModel(DbUtils.resultSetToTableModel(rs));

rs.close();

編輯
由於您將日期格式更改為YYYY-MM-DD
您可以使用以下查詢:

String sql = "select * from Members_Tbl WHERE strftime('%Y-%m', Start) = strftime('%Y-%m', 'now')";

字符串sql =“從Member_Tbl中選擇*,在strftime('%m',Start)== strftime('%m','now')”;

這是我使用的查詢,經過幾次搜索后,日期應為YYYY-MM-DD。 謝謝大家的合作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM