Почему этот запрос дает пустой набор при форматировании дат с базой данных MySQL? - PullRequest
2 голосов
/ 04 января 2012

Почему этот запрос выдает пустой набор с 3 предупреждениями?

SELECT * 
FROM Productions 
WHERE date_prod=DATE_FORMAT('01/01/2012','%Y/%m/%d');

Это то, что в таблице производств.

+-------------+------------+----------+----------+---------+---------------------+---------------------+---------------------+----------+
| numlotfdg   | date_prod  | Dur_Prod | Dur_trns | Dur_ins | t0                  | tc                  | texp                | nbrdoses |
+-------------+------------+----------+----------+---------+---------------------+---------------------+---------------------+----------+
| FG-111204B1 | 2011-12-04 |      180 |       70 |      30 | 2011-12-04 06:20:00 | 2011-12-04 10:30:00 | 2011-12-04 16:30:00 |        6 |
| FG-111227B1 | 2011-12-27 |      180 |       50 |      30 | 2011-12-27 06:40:00 | 2011-12-27 10:00:00 | 2011-12-27 16:45:00 |       18 |
| FG-120101B1 | 2012-01-01 |        0 |       70 |      30 | 2012-01-01 06:20:00 | 2012-01-01 10:30:00 | 2012-01-01 16:30:00 |        6 |
+-------------+------------+----------+----------+---------+---------------------+---------------------+---------------------+----------+
3 rows in set (0.00 sec)

Я использую французскую ОС (Windows XP)и мы используем этот формат даты: DD/MM/YYYY

, и это код Java, который я использую для заполнения JTable

"select * from Productions where date_prod=STR_TO_DATE('"+jTextField2.getText()+"','%Y-%m-%d')"

Структура таблицы

create table Productions(numlotfdg varchar(100) primary key,
                        date_prod Date,
                        Dur_Prod int,
                        Dur_trns int,
                        Dur_ins int ,
                        t0 Timestamp,
                        tc TimeStamp,
                        texp Timestamp,
                        nbrdoses int);

Ответы [ 3 ]

0 голосов
/ 04 января 2012

Попробуйте вместо этого:

select * from Productions where DATE(convert(datetime, data_prod)) = '01/01/2012'
0 голосов
/ 04 января 2012

Вы можете попробовать с str_to_date вот так

select * from Productions where date_prod=STR_TO_DATE('01/01/2012','%d/%m/%y');

и посмотрите, работает ли это

0 голосов
/ 04 января 2012

Используйте функцию DATE() для сравнения только с частью даты DATETIME.Не используйте DATE_FORMAT() в предложении WHERE, потому что вам нужно использовать внутренний формат даты MySQL YYYY-MM-DD там:

/* Truncate the DATETIME field to only its date for comparison */
/* And use the format YYYY-MM-DD in the WHERE clause */
select * from Productions where DATE(date_prod) = '2012-01-01';

В качестве альтернативы, STR_TO_DATE()можно преобразовать дату в правильный формат в MySQL, а не делать это на стороне приложения в Java.

select * from Productions where DATE(date_prod) = STR_TO_DATE('01/01/2012', '%d/%m/%Y');
...