2016-07-15 3 views
0

Я немного путаюсь по моему запросу, как получение всех дней рождения в диапазоне дат. У меня есть сценарий здесь,Получение дней рождения независимо от года

date_from = "2014-12-01" date_to = "2015-01-30" 

Другой сценарий

date_from = "2015-02-01" date_to = "2015-03-31" 
+0

Вы можете использовать union all для получения комбинированных данных из обоих запросов в одном запросе –

+0

hi Jordan, я уже обновлен по почте извините за неправильную информацию. Но я просто хочу получить все дни рождения независимо от года. Мы все знаем, что день рождения повторяется, поэтому он не против, если его 1990-е или 2000-е годы. – claire

+0

Я обновил свой ответ в качестве вашего требования, сообщите мне, если он работает для вас или нет. –

ответ

0

Попробуйте этот запрос,

SELECT * FROM table_name WHERE (date>='2014-12-01' AND date<='2015-01-30') OR (date>='2015-02-01' AND date<='2015-03-31') 
+0

Вы можете использовать 'between' – Shaharyar

1

Попробуйте что-то вроде этого

SELECT * FROM your_table WHERE (date_column BETWEEN '2014-12-01 AND '2015-01-30') OR (date_column BETWEEN '2015-02-01' AND '2015-03-31') 

Edit

SELECT * FROM your_table 
WHERE DATE_FORMAT(added_date, '%m-%d') BETWEEN '12-01' AND '12-31' 
OR DATE_FORMAT(added_date, '%m-%d') BETWEEN '01-01' AND '12-30' 
OR DATE_FORMAT(added_date, '%m-%d') BETWEEN '02-01' AND '03-31' 
+0

Я обновил свой пост, в нем что-то не так, я просто хочу получить все эти дни рождения, но независимо от года. Поскольку дни рождения повторяются, тогда, если мы включим год, он не сработает. – claire

+0

Правильно! Поэтому скажите мне, что мне нужен месячный диапазон, и я буду соответствующим образом обновлять свой ответ. –

+2

'BETWEEN DATE_FORMAT ('2015-02-01', '% m-% d')', зачем беспокоиться о том, чтобы год был в том месте, где его можно было удалить? : p – Philipp

0

Попробуйте

select * from `table` where `birthday` between '2014-12-01' and '2015-01-30' 

или

select * from `table` where `birthday` >= '2014-12-01' and `birthday` <= '2015-01-30' 

OK Я понимаю. Попробуйте

select * from `table` where substr(`birthday`,6) between '12-01' and '01-30' 
+0

Привет, Константинос, я просто хочу отобразить все dec 1 до 30 января дня рождения .. вне зависимости от года – claire

0

Попробуйте

SELECT * FROM your_table WHERE date_column BETWEEN '2014-12-01' AND '2015-01-30' 
union 
SELECT * FROM your_table WHERE date_column BETWEEN '2015-02-01' AND '2015-03-31'; 
+0

Привет, Ассен, я уже пробовал этот SELECT * FROM your_table WHERE (date_column BETWEEN '2014-12-01 AND '2015-01-30') , но он будет показывать дни рождения на 2014 и 2015 годы. Я хочу отображать все, независимо от года. Так что это похоже на 12 декабря - 30 дней рождения. – claire

0

Является

select * from `table` where (`birthday` between '2014-12-01' and '2015-01-30') or 
(`birthday` >= '2014-12-01' and `birthday` <= '2015-01-30') 
0
SELECT * FROM table1 
WHERE DATE_FORMAT(`yourField`,"%m-%d") BETWEEN "01-01" AND "01-30" 
OR DATE_FORMAT(`yourField`,"%m-%d") BETWEEN "12-01" AND "12-31" 
OR DATE_FORMAT(`yourField`,"%m-%d") BETWEEN "02-01" AND "03-31" 

Таким образом, за год в вашей даты будут игнорироваться, вы просто должны правильно определить диапазоны. (Начало декабря до конца декабря, а не в январе, а затем следующего начала в январе)

В качестве примера для построения запроса в PHP:

$from = "2015-12-01"; 
$to = "2016-01-31"; 

if(substr($from, 0, 4) < substr($to, 0, 4)){ 
    $query = 'SELECT * FROM table1 
       WHERE DATE_FORMAT(`yourField`,"%m-%d") BETWEEN "' . substr($from, 5) . '" AND "12-31" 
       OR DATE_FORMAT(`yourField`,"%m-%d") BETWEEN "01-01" AND "' . substr($to, 5) . '"'; 
}else{ 
    $query = 'SELECT * FROM table1 
       WHERE DATE_FORMAT(`yourField`,"%m-%d") BETWEEN "' . substr($from, 5) . '" AND "' . substr($to, 5) . '"'; 
} 
var_dump($query); 
exit; 

Of yourse вы должны добавить обычные методы защиты и добавить проверки на достоверность данных.

+0

Привет, Филип, вы можете улучшить этот код? SELECT * FROM table1 WHERE DATE_FORMAT ('yourField',"% m-% d ") МЕЖДУ« 01-01 »И« 01-30 » ИЛИ DATE_FORMAT (' yourField', "% m-% d") BETWEEN "12-01" И "12-31" У меня есть только 2 выбора даты для диапазона .. спасибо .. Я думаю, мой запрос ближе к этому. – claire

+0

Затем вам нужно будет проверить, переключается ли выбранный daterange с одного года на другой, а затем строит запрос соответствующим образом. Как и в примере, если у вас есть диапазон от декабря до января, вам нужно два между statemnts, для декабря первого года и для января. В другом случае, с февраля до марта/октябрь/декабрь не было бы проблем – Philipp

+0

добавил несколько php в качестве примера – Philipp

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