首页 > 解决方案 > 如果提供了日期范围,则返回特定范围内的表中的日志,否则返回表中日期为时间戳的所有日志 ---oracle 查询

问题描述

如果提供了日期范围,则返回特定范围内的表中的数据,否则返回表中日期在时间戳中的所有数据——oracle查询

标签: oracle

解决方案


我就是这样理解这个问题的。

基于EMP包含该hiredate列的 Scott 表,我将选择某个日期范围内的值。

SQL> alter session set nls_date_format = 'dd.mm.yyyy'
  2  /

Session altered.

SQL> select ename, job, hiredate from emp order by hiredate;

ENAME      JOB       HIREDATE
---------- --------- ----------
SMITH      CLERK     17.12.1980
ALLEN      SALESMAN  20.02.1981
WARD       SALESMAN  22.02.1981
JONES      MANAGER   02.04.1981
BLAKE      MANAGER   01.05.1981      --> from here ...
CLARK      MANAGER   09.06.1981
TURNER     SALESMAN  08.09.1981
MARTIN     SALESMAN  28.09.1981
KING       PRESIDENT 17.11.1981      --> ... to here
JAMES      CLERK     03.12.1981
FORD       ANALYST   03.12.1981
MILLER     CLERK     23.01.1982
SCOTT      ANALYST   09.12.1982
ADAMS      CLERK     12.01.1983

14 rows selected.

SQL>

Query 使用两个参数:date from (pass 01.05.1981) 和 date to (pass 17.11.1981)。这是处理参数为 的可能性的“标准”方式NULL。示例将在例如 TOAD 或 SQL Developer 中运行良好。

select ename, job, hiredate
from emp
where (hiredate >= :par_date_from or :par_date_from is null)
  and (hiredate <= :par_date_to   or :par_date_to   is null)
order by hiredate;

ENAME      JOB       HIREDATE
---------- --------- ----------
BLAKE      MANAGER   01.05.1981
CLARK      MANAGER   09.06.1981
TURNER     SALESMAN  08.09.1981
MARTIN     SALESMAN  28.09.1981
KING       PRESIDENT 17.11.1981

如果两个参数都是NULL,则返回所有表行。


推荐阅读