情况一:无返回结果集(date+trunc)
#当天为20201029
where (cpl.operate_time > date '2020-10-30' or cpl.operate_time > trunc(sysdate))
执行计划:

情况二:有返回结果集(date+date)
#当天为20201029
where (cpl.operate_time > date '2020-10-29' or cpl.operate_time > date '2020-10-28')
执行计划:

情况三:无返回结果集(tunc+sysdate)
#当天为20201029
where (cpl.operate_time > trunc(sysdate) or cpl.operate_time > sysdate-1/24)
执行计划:

情况四:有返回结果集(date +sysdate)
#当天为20201029
where (cpl.operate_time > date '2020-10-29' or cpl.operate_time > sysdate-1/24)
执行计划:

注意:查询对同一个字段有or操作时需统一数据类型,可能原因是类型做了隐式转换。建议不要用系统函数,即使使用也要转换成同一种类型。避免踩坑。
本文探讨了SQL查询中日期比较的问题,强调了在使用OR条件时保持数据类型一致的重要性,以避免隐式类型转换可能导致的性能下降。通过四个不同情况的执行计划分析,展示了date和trunc函数在查询条件中的影响,提醒开发者避免使用系统函数或确保它们在同一类型上操作,以提高查询效率。
1066





