SQL java Выбрать все записи, которые были добавлены в этом месяце - PullRequest
0 голосов
/ 11 апреля 2019

Мне нужно отобразить в таблице все записи, которые были созданы_ в этом месяце. формат ммм дд гггг, с использованием 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);
    }

Ответы [ 4 ]

1 голос
/ 12 апреля 2019

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();

Я согласен с вами, когдаВы говорите, что формат в вашей базе данных: ммм дд гггг, например Apr 11 2019.Я предполагаю, что английские сокращения месяца.

Я бы порекомендовал хранить в вашей базе данных стандартные строки даты ISO 8601.Это похоже на 2019-04-11.Тогда ваша строка шаблона формата будет uuuu-MM-'%'.Или вы можете сравнить строки, используя <= и <, что, вероятно, будет более эффективным.

Используемые вами классы даты / времени SimpleDateFormat и Calendar плохо разработаны и, к счастью,давно устарел.Вместо этого я использую java.time, современный Java-интерфейс даты и времени.С ним гораздо приятнее работать.

Ссылки

0 голосов
/ 12 апреля 2019

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

Это запрос, который я использовал, и после нескольких поисков дата должна быть ГГГГ-ММ-ДД. Спасибо всем за сотрудничество.

0 голосов
/ 11 апреля 2019

Ваш 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')";
0 голосов
/ 11 апреля 2019

Вы можете использовать (см. Ниже) функцию SQLite substr core : -

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), то вышеприведенное не будет работать должным образом.

Рекомендуется хранить даты в формате ГГГГ-ММ-ДД (или в любом из форматов временных строк по ссылке). Затем вы можете использовать функции SQLite DateTime .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...