Для программы, которую я пишу (на Java) для школы, мне нужно запустить оператор select между датами, чтобы создать расписание. Это выбирает данные из SQL и помещает их в таблицу. Моя проблема в том, что дата типа данных находится в формате «ГГГГ-ММ-ДД», а библиотека JCalendar, которую я использую, дает дату как ММ / ДД / ГГГГ, поэтому это нарушает ее. Есть ли способ изменить формат SQL? Или простой способ исправить это?
Это мой запрос на выборку:
'"SELECT * FROM `events`
WHERE `Date Of Event` >= '"+firstDate+"' AND `Date Of Event` <= '"+secondDate+"'"'
Где первая и последняя дата в другом формате.
Любая помощь приветствуется.
2 ответа
Вы можете использовать класс SimpleDateFormat для анализа date в объект Date и использовать другой SimpleDateFormat объект, чтобы преобразовать его в требуемый формат.
Вот пример того, как это сделать:
String sqlDate = "1992-02-16";
SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdfInput.parse(sqlDate);
SimpleDateFormat sdfResult = new SimpleDateFormat("MM-dd-yyyy");
String result = sdfResult.format(date);
Причина, по которой база данных хранит его в формате yyyy-MM-dd
, состоит в том, чтобы разрешить сортировку, в то время как ваш JCalendar
использует формат MM-dd-yyyy
, потому что это стандартный американский способ отображения даты.
Я также настоятельно рекомендую вам использовать PreparedStatement и добавить параметры в это, а не конкатенация.
Чтобы быть точным, это в основном то, что вы хотите в SQL:
SELECT *
FROM `events`
WHERE `Date Of Event` >= str_to_date('"+firstDate+"', '%m/%d/%Y') AND
`Date Of Event` <= str_to_date('"+secondDate+"', %m/%d/%Y)"'
Вы также можете выполнить это преобразование на уровне приложения. Просто убедитесь, что вы передаете константы даты в формате «ГГГГ-ММ-ДД». Выполнение этого в базе данных гарантирует, что сравнения действительно работают по датам.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.
str_to_date()
в документации MySQL.