2012-05-26 2 views
0

Ниже запроса я использую в моем поискеНужна помощь по запросу Диапазон дат MySQL

У меня есть диапазон дат поиска, когда я поиск данных между '01/05/2012' и '31/05/2012' даты но запрос возвращает весь набор записей.

SELECT t.created date, t.saleid sale_id, u.id user_id, NULL merchant_name, cheque_number cheque_number, u.first_name name, (
SELECT company_name 
FROM users 
WHERE id = u.my_charity_id)charity_name, t.campaignname website, t.campaignid campaign_id, t.mysoko_discount discount_percentage, t.discount, t.salecommission sale_commission, t.salevalue total_sale_value, t.salestatus sale_status 
FROM `transaction` AS `t` , `users` AS `u` 
WHERE DATE_FORMAT(t.created, '%d/%m/%Y') 
BETWEEN '01/05/2012' AND '31/05/2012' 
AND t.user_id = u.id 
LIMIT 0 , 30 

Я ищу диапазон дат поиска данных, но результат возвращает все данные из таблицы.

date   sale_id  user_id 
2012-04-19 00:00:00  20253305 45 
2012-04-11 00:00:00  20253306 68 
2012-04-23 00:00:00  20253307 68 
2012-04-25 00:00:00  20253308 45 
2012-04-27 00:00:00  20253309 45 
2012-04-29 00:00:00  20253310 68 
2012-04-30 00:00:00  20253311 45 
2012-05-01 00:00:00  20253312 45 
2012-05-03 00:00:00  20253313 68 
2012-04-18 00:00:00  20253314 4 

Мой поиск от даты поиска диапазон TxN (от/до настоящего времени)

Формат ввода даты: ДД/ММ/ГГГГ

ответ

1

ли это:

WHERE t.created BETWEEN '2012-05-01 00:00:00' AND '2012-05-31 23:59:59' ... 

MySQL будет интерпретировать «2012-05-31 23:59:59 'в качестве подходящего типа DATETIME или TIMESTAMP, позволяющего вам воспользоваться индексом на t.created.

Ваша проблема заключается в том, что текущий запрос указывает, что строковое представление из t.created быть между строк '01/05/2012' и '31/05/2012' . Поскольку вы строковый формат day-month-year, любая дата, чей компонент дня находится между «02» и «30», включительно, будет соответствовать. (И первый из любого месяца мая или позже будет соответствовать и т. Д.)

0

Один из вариантов:

WHERE MONTH(t.created) = 5 AND YEAR(t.created) = 2012 
1

Вы могли бы попробуйте фильтровать строки следующим образом:

WHERE t.created >= '2012-05-01' 
    AND t.created < '2012-06-01' 

Если месяц указан в качестве аргумента, вы можете использовать следующие вычисления в предложении WHERE:

WHERE t.created >= @monthdate 
    AND t.created < @monthdate + INTERVAL 1 MONTH 
0
SELECT t.created date, t.saleid sale_id, u.id user_id, NULL merchant_name, cheque_number cheque_number, u.first_name name, (
SELECT company_name 
FROM users 
WHERE id = u.my_charity_id)charity_name, t.campaignname website, t.campaignid campaign_id, t.mysoko_discount discount_percentage, t.discount, t.salecommission sale_commission, t.salevalue total_sale_value, t.salestatus sale_status 
FROM `transaction` AS `t` , `users` AS `u` 
WHERE DATE_FORMAT(t.created, '%d/%m/%Y') 
BETWEEN STR_TO_DATE('01/05/2012','%d,%m,%Y') AND STR_TO_DATE('31/05/2012','%d,%m,%Y') 
AND t.user_id = u.id 
LIMIT 0 , 30 
+0

вы должны быть уверены, что t.created также имеет формат даты – Sebas

+0

Sebas Я получаю пустой результат MySQL возвратил пустой набор результатов (т.е. нулевые строки). (Запрошена 0.0418 сек) – Elankeeran

Смежные вопросы