Мне сложно объяснить это в письменной форме, поэтому проявите терпение.
Я делаю этот проект, в котором мне нужно выбрать месяц и год, чтобы знать всех активных сотрудников в течение этого месяца года .. но в моей базе данных я храню даты, когда они начали и когда они закончено в формате дд / мм / гггг.
Итак, если у меня есть сотрудник, который проработал 4 месяца, например. с 01.01.2013 по 05.01.2013 я его получу через четыре месяца. Мне нужно, чтобы он появлялся в 4 таблицах (по одной на каждый активный месяц) с другими сотрудниками, которые активны в течение этих месяцев. В данном случае это будут: январь, февраль, март и апрель 2013 года.
Проблема в том, что я понятия не имею, как сделать здесь запрос или обработать PHP для этого.
Все, что я могу придумать, это что-то вроде (я бы запускал этот запрос для каждого месяца, передавая год и месяц в качестве аргумента)
pg_query= "SELECT employee_name FROM employees
WHERE month_and_year between start_date AND finish_date"
Но это невозможно сделать, главным образом потому, что month_and_year
должен быть столбцом, а не переменной.
Кто-нибудь придумает?
ОБНОВЛЕНИЕ
Да, мне очень жаль, что я забыл сказать, что использовал DATE в качестве типа данных.
Самым простым решением, которое я нашел, было использование ЭКСТРАКТА
select * from employees where extract (year FROM start_date)>='2013'
AND extract (month FROM start_date)='06' AND extract (month FROM finish_date)<='07'
Это дает мне все записи с июня 2013 года, вы уверены, что можете заменить буквальные переменные на любую переменную по своему усмотрению.
WHERE
не подлежат маржированию. Я бы рассмотрел либо свой ответ, либо ответ Клодоальдо. (Не Гордона, который также не работает в этом отношении.) Протестируйте с помощьюEXPLAIN ANALYZE
< / a> чтобы убедиться. - person Erwin Brandstetter   schedule 08.07.2013