Для программы, которую я пишу (на Java) для школы, мне нужно запустить оператор select между датами, чтобы создать расписание. Это выбирает данные из SQL и помещает их в таблицу. Моя проблема в том, что дата типа данных находится в формате «ГГГГ-ММ-ДД», а библиотека JCalendar, которую я использую, дает дату как ММ / ДД / ГГГГ, поэтому это нарушает ее. Есть ли способ изменить формат SQL? Или простой способ исправить это?

Это мой запрос на выборку:

'"SELECT * FROM `events` 
 WHERE `Date Of Event` >= '"+firstDate+"' AND `Date Of Event` <= '"+secondDate+"'"' 

Где первая и последняя дата в другом формате.

Любая помощь приветствуется.

0
broliverparker 16 Мар 2014 в 19:11
Изучите функцию str_to_date() в документации MySQL.
 – 
Gordon Linoff
16 Мар 2014 в 19:13
Я не совсем уверен, как эта функция помогает мне?
 – 
broliverparker
16 Мар 2014 в 19:16

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 и добавить параметры в это, а не конкатенация.

2
Vlad Schnakovszki 16 Мар 2014 в 19:28
Благодарность! это заставило меня понять, что я использовал SimpleDateFormat, но установил неправильное форматирование. дурак я!
 – 
broliverparker
16 Мар 2014 в 19:26

Чтобы быть точным, это в основном то, что вы хотите в 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)"'

Вы также можете выполнить это преобразование на уровне приложения. Просто убедитесь, что вы передаете константы даты в формате «ГГГГ-ММ-ДД». Выполнение этого в базе данных гарантирует, что сравнения действительно работают по датам.

0
Gordon Linoff 16 Мар 2014 в 19:21