根据IF语句执行查询变体

时间:2018-12-12 15:59:59

标签: oracle if-statement case

尝试在下面简单解释一下。

简单的if语句(实际上就像

if sysdate >= trunc(sysdate)+5/24

),设置要在查询中使用的参数

if 2>=1 then
  define ThisTime = trunc(sysdate)-1
else
  define ThisTime = trunc(sysdate)

select *
from table
where time >= &ThisTime

以上方法无效,我想知道是否有可能?不幸的是,它是一个静态监视查询,该查询在itrs中从sqltoolkit运行,我想不出另一种选择过渡时间的方法。

2 个答案:

答案 0 :(得分:1)

如果您尝试从凌晨5点之前运行的昨天获取数据,而从今天凌晨5点之后运行的数据获取,那么您可以在过滤器截断前将其调整5个小时:

BOSM00645241A:docker_home i858847$ docker build -t my-test-image .
Sending build context to Docker daemon  78.02MB
Step 1/2 : FROM ubuntu:16.04
16.04: Pulling from library/ubuntu
7b8b6451c85f: Pull complete 
ab4d1096d9ba: Pull complete 
e6797d1788ac: Pull complete 
e25c5c290bde: Pull complete 
Digest: sha256:e547ecaba7d078800c358082088e6cc710c3affd1b975601792ec701c80cdd39
Status: Downloaded newer image for ubuntu:16.04
 ---> a51debf7e1eb
Step 2/2 : RUN mkdir -pv /app
 ---> Running in 9bc2264df0de
mkdir: created directory '/app'
Removing intermediate container 9bc2264df0de
 ---> f0b0c0a4e266
Successfully built f0b0c0a4e266
Successfully tagged my-test-image:latest
BOSM00645241A:docker_home i858847$ docker run -it --name my-test-image --rm bash
Unable to find image 'bash:latest' locally
latest: Pulling from library/bash
4fe2ade4980c: Pull complete 
57ab8b6a12dc: Pull complete 
f5cb10ae9311: Pull complete 
Digest: sha256:360cdc0a48755a2701ed82156cd27d9e9f1a1f52c84b3b03a794d78f115c7e0f
Status: Downloaded newer image for bash:latest
bash-4.4# ls
bin    dev    etc    home   lib    media  mnt    proc   root   run    sbin   srv    sys    tmp    usr    var
bash-4.4# 

例如在04:59跑步时,select * from your_table where time >= trunc(sysdate - 5/24) and time < trunc(sysdate + 19/24) 昨天的结果为23:59,sysdate - 5/24今天的结果为23:59;删减昨天午夜和今天午夜的那些东西。

例如在05:01运行时,sysdate + 19/24今天的计算结果为00:01,sysdate - 5/24明天的计算结果为00:01;截断今天午夜和明天午夜的那些东西。

答案 1 :(得分:0)

即使在大多数情况下执行效果都很差(我倾向于避免使用OR条件),您也可以将决策实施为OR:

select *
  from table
 where (sysdate >= trunc(sysdate)+5/24 and time >= trunc(sysdate))
       or (sysdate < trunc(sysdate)+5/24 and time >= trunc(sysdate) - 1)