Как выбрать даты между двумя указанными датами в запросе Oracle? - PullRequest
4 голосов
/ 18 февраля 2011

Как выбрать даты между двумя указанными датами в запросе Oracle?

Ответы [ 7 ]

8 голосов
/ 18 февраля 2011
SELECT * FROM your_table WHERE your_date_field BETWEEN DATE '2010-01-01' AND DATE '2011-01-01';
8 голосов
/ 18 февраля 2011
SELECT TO_DATE('12/01/2003', 'MM/DD/YYYY') - 1 + rownum AS d
FROM all_objects
WHERE TO_DATE('12/01/2003', 'MM/DD/YYYY') - 1 + rownum <= TO_DATE('12/05/2003', 'MM/DD/YYYY')

от

http://forums.devshed.com/oracle-development-96/select-all-dates-between-two-dates-92997.html

4 голосов
/ 18 февраля 2011

Вы можете хитроумно использовать псевдостолбец LEVEL для генерации серии, поэтому, например, чтобы получить список дней между сегодняшним днем ​​и 20 днями, я могу:

select trunc(sysdate+lvl) from
  (select level lvl from dual connect by level < ((sysdate+20)-sysdate - 1) )
order by 1  

В общем, вы можете увидеть, как это будет применяться для любых двух данных дат.

select trunc(early_date+lvl) from
  (select level lvl from dual connect by level < (later_Date-early_date-1) )
order by 1 

И вы можете изменить пункты, если хотите включить также две даты окончания.

1 голос
/ 18 февраля 2011

Используйте «между».В общем смысле:

select * from someTable where dateCol between date1 and date2;

обратите внимание, что dateCol определяется как дата, а date1 и date2 также являются значениями даты.Если это не даты, вы конвертируете их в даты с помощью функции to_date.

0 голосов
/ 16 марта 2017

со всеми днями как (выберите trunc (to_date ('12 -03-2017 ',' dd-mm-yyyy ') + levl) -1 как all_dates из (выберите уровень levl из двойного подключения по уровню <(sysdate-to_date ('12 -03-2017 ',' DD-MM-YYYY ') + 1)) заказать по 1) выберите количество (*) как no_of_days из всех дней, где ltrim (rtrim (to_char (all_dates, 'DAY'))) не включено ('SATURDAY', 'SUNDAY'); </p>

0 голосов
/ 19 января 2017

Это был бы лучший подход, как также упоминалось в PL SQL Официальная Документация.

нам нужно использовать встроенную функцию PL SQL TO_DATE (Date, Date format) , чтобы получить решение.

SELECT * FROM order_details
WHERE order_date 
BETWEEN 
TO_DATE ('2014/02/01', 'yyyy/mm/dd') 
AND 
TO_DATE ('2014/02/28', 'yyyy/mm/dd');

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

SELECT * FROM order_details 
WHERE order_date >= TO_DATE('2014/02/01', 'yyyy/mm/dd') 
AND order_date <= TO_DATE('2014/02/28','yyyy/mm/dd');
0 голосов
/ 18 февраля 2011
select * from yourtable where somedate between sysdate and sysdate - 42
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...