首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >个案及情况

个案及情况
EN

Stack Overflow用户
提问于 2016-09-15 20:06:29
回答 2查看 78关注 0票数 0

下面是我的sql代码。我希望所有I的描述,有创建时间或更新时间从25-8月31日至8月31日。

目前,如果一个id的创建时间介于25-8月25日-8月31-8月,尽管更新时间在9月份,sql将返回更新时间的记录。

理想情况下,它只应返回在25-8月25日-8月31日-8月31日之间有创建或更新时间的记录。为什么我的案例忽略了更新时间的条件?

代码语言:javascript
复制
select t1.id, t1.desc,
Case
WHEN t1.create_time IS NOT NULL
THEN t1.create_time
WHEN t2.update_time IS NOT NULL
THEN t2.update_time
END AS "TimeStamp"
from t1, t2
where t1.id=t2.id(+)
AND ( t1.create_time BETWEEN TO_DATE ('25-AUG-2016 00:00:00',
                                   'dd-mon-yyyy HH24:Mi:SS')
                   AND TO_DATE ('31-AUG-2016 23:59:59',
                                'dd-mon-yyyy HH24:Mi:SS')
       OR (  t2.update_time
                   BETWEEN TO_DATE ('25-AUG-2016 00:00:00',
                                    'dd-mon-yyyy HH24:Mi:SS')
                   AND TO_DATE ('31-AUG-2016 23:59:59',
                                'dd-mon-yyyy HH24:Mi:SS')
                )
            )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 21:50:35

create_timeupdate_timeOR组合的查询条件中。当我们用OR组合两个条件时,如果其中一个条件是TRUE,那么结果也将是TRUE。因此,在您的查询中,如果create_time在此范围内,那么metter update_time就不属于此范围。

在加入表之前,可以使用子查询来筛选表。

代码语言:javascript
复制
select t1_1.id, t1_1.desc,
CASE
WHEN t1_1.create_time IS NOT NULL
THEN t1_1.create_time
WHEN t2_1.update_time IS NOT NULL
THEN t2_1.update_time
END AS "TimeStamp"
from (select * from t1 
       where t1.create_time BETWEEN TO_DATE ('25-AUG-2016 00:00:00',
                                             'dd-mon-yyyy HH24:Mi:SS')
                                AND TO_DATE ('31-AUG-2016 23:59:59',
                                             'dd-mon-yyyy HH24:Mi:SS')) t1_1, 
      (select * from t2 
         where t2.update_time BETWEEN TO_DATE ('25-AUG-2016 00:00:00',
                                             'dd-mon-yyyy HH24:Mi:SS')
                                  AND TO_DATE ('31-AUG-2016 23:59:59',
                                             'dd-mon-yyyy HH24:Mi:SS')) t2_1
where t1_1.id_=t2_1.id_(+)
票数 0
EN

Stack Overflow用户

发布于 2016-09-15 20:41:35

试试这个:

代码语言:javascript
复制
SELECT t1.id, t1.desc,
t1.create_time  'TimeStamp'
from t1 
where
trunc(t1.create_time) BETWEEN TO_DATE ('25-AUG-2016','DD-MON-YYYY')
                   AND TO_DATE ('31-AUG-2016','DD-MON-YYYY')
union all
SELECT t1.id, t1.desc,
t1.update_time 'TimeStamp'
from t1 
where
(  trunc(t1.update_time)
                   BETWEEN TO_DATE ('25-AUG-2016','DD-MON-YYYY')
                   AND TO_DATE ('31-AUG-2016','DD-MON-YYYY')
                )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39519498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档