首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致此日期比较错误的原因是什么?

导致此日期比较错误的原因是什么?
EN

Stack Overflow用户
提问于 2017-10-02 23:06:48
回答 1查看 69关注 0票数 1

我一直在努力理解为什么这个查询不能工作。此所有者的所有分区名称都具有格式为'R_DATE_20170831‘的值。但下面的查询始终返回错误ORA-01841 (完整)年份必须介于-4713和+9999之间,而不是0。当我单独显示每个日期部分时,它们都在该范围内。我的NLS_DATE_FORMAT显示了一个值'DD-MON-RR‘。

代码语言:javascript
复制
SELECT COUNT(*)
FROM dba_tab_partitions
WHERE table_owner = 'myId' AND
      TO_DATE(SUBSTR(partition_name,INSTR(partition_name,'_',1,2) + 1),'YYYYMMDD') < TRUNC(SYSDATE) - 10;

我还尝试在Sysdate-10周围放置一个带有适当掩码的TO_DATE,但仍然出现错误。有什么见解吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-10-02 23:15:33

我在SQL Server中看到过类似的情况,这是由于WHERE表达式不一定是按顺序计算的。这意味着其他分区正在经历日期算术逻辑--并导致失败。

CASE保证了计算的顺序。这行得通吗?

代码语言:javascript
复制
SELECT COUNT(*)
FROM dba_tab_partitions
WHERE table_owner = 'myId' AND
      (CASE WHEN  table_owner = 'myId'
            THEN TO_DATE(SUBSTR(partition_name, INSTR(partition_name, '_', 1, 2) + 1), 'YYYYMMDD')
       END) < TRUNC(SYSDATE) - 10;

或者这个版本:

代码语言:javascript
复制
SELECT COUNT(*)
FROM dba_tab_partitions
WHERE table_owner = 'myId' AND
      (CASE WHEN regexp_like(partition_name, '[^_]*_[^_*]_[0-9]{8}$'
            THEN TO_DATE(SUBSTR(partition_name, INSTR(partition_name, '_', 1, 2) + 1), 'YYYYMMDD')
       END) < TRUNC(SYSDATE) - 10;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46528301

复制
相关文章

相似问题

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