Neste caso, você precisa pensar nas seguintes possibilidades:
-
Registros com data inicial igual ou posterior à data inicial informada e data final igual ou anterior à data final informada
WHERE data_inicial >= TO_DATE(‘01/03/2017’, ‘dd/mm/yyyy’) AND data_final <= TO_DATE(‘31/03/2017’, ‘dd/mm/yyyy’)
-
Registros com data inicial igual ou posterior à data inicial informada e data final posterior à data final informada
data_inicial >= TO_DATE('01/03/2017', 'dd/mm/yyyy') AND data_final >= TO_DATE('31/03/2017', 'dd/mm/yyyy')
- Registros com data inicial anterior à data inicial informada e data final igual ou anterior à data final informada
data_inicial < TO_DATE('01/03/2017', 'dd/mm/yyyy') AND data_final <= TO_DATE('31/03/2017', 'dd/mm/yyyy')
- Registros com data inicial anterior à data inicial informada e data final posterior à data final informada
data_inicial < TO_DATE('01/03/2017', 'dd/mm/yyyy') AND data_final > TO_DATE('31/03/2017', 'dd/mm/yyyy')
SELECT col1, col2, col3, col4, coln
FROM tabela_que_grava_meus_registros
WHERE (data_inicial >= TO_DATE('01/03/2017', 'dd/mm/yyyy') AND data_final <= TO_DATE('31/03/2017', 'dd/mm/yyyy'))
OR (data_inicial >= TO_DATE('01/03/2017', 'dd/mm/yyyy') AND data_final >= TO_DATE('31/03/2017', 'dd/mm/yyyy'))
OR (data_inicial < TO_DATE('01/03/2017', 'dd/mm/yyyy') AND data_final <= TO_DATE('31/03/2017', 'dd/mm/yyyy'))
OR (data_inicial < TO_DATE('01/03/2017', 'dd/mm/yyyy') AND data_final > TO_DATE('31/03/2017', 'dd/mm/yyyy'));
O principal risco disso é, caso não exista outros critérios de filtro, você sempre terá todos os registros retornados.