qq_25319077 2019-09-27 09:35 采纳率: 0%
浏览 613

oracle 探讨关于where条件过滤逻辑,和子查询顺序的问题

在oracle数据库清理分区的时候,需要把一段时间以前的分区清空,
用到的语句是
select SUBSTR(PARTITION_name, 4),
to_date(SUBSTR(PARTITION_name, 4), 'yyyymmdd')
from user_segments
where segment_name = 'CHECK_TAB_COL_VALID'
--and partition_name <> 'PH_MAX'-----1
--and SUBSTR(PARTITION_name, 4)<>'MAX'------2
and to_date(SUBSTR(PARTITION_name, 4), 'yyyymmdd') <> date'2019-09-27'

 想探讨的是为什么如上语句中在条件当中的 1的写法为什么没有起倒过滤'PH_MAX'作用,to_date(SUBSTR(PARTITION_name, 4), 'yyyymmdd') 还是将PH_MAX 的记录传入to_date(SUBSTR(PARTITION_name, 4), 'yyyymmdd') 函数转化为时间,故有报错 ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0
 但是在2的写法就有起倒过滤作用,
 另关于系统表和自己建的表的区别数据一致的情况下,为什么user_segments
 1的写法不行,自己创建的表第一种写法就可以,
 还有关于字查询,查询顺序的探讨:在寻找问题原因的时候,测试了这种写法
select * from (select to_date(SUBSTR(PARTITION_name,4),'yyyymmdd')time from  user_segments where segment_name='CHECK_TAB_COL_VALID'

and partition_name<>'PH_MAX') where time<date'2019-09-27'
依然会报:ORA-01841错误,这种查询的逻辑是不是先吧()里面的记录先查询出来?在做时间条件的判断?但是为什么还是会报?ORA-01841错误

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2019-09-30 23:56
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?