日期格式转换不准确导致oracle

时间:2015-07-14 09:52:24

标签: oracle

SELECT substr(partition_name, 8, 16)
FROM all_tab_partitions
WHERE TABLE_owner IN (
        'DATAMARTCORE'
        ,'DWHCORE'
        )
    AND TO_CHAR(TO_DATE(substr(partition_name, 8, 16), 'yyyy/mm/dd'), 'yyyy/mm/dd') <= to_char(to_date('2015/05/31', 'yyyy/mm/dd'))

以下查询导致错误 - 文字与格式字符串

不匹配

想要所有小于的分区

Partition_name列采用字符串格式

1 个答案:

答案 0 :(得分:0)

根据documentation substr有以下规范:

SUBSTR(string, position, substring_length)

注意:位置是从1开始的(但如果你输了0则意味着1)

因此子字符串长度16不适合“yyyy / mm / dd”,这可能会解释错误信息。

此外,我无法通过转换为比较日期足够的字符串来比较日期。

所以我已将SQL更新为:

SELECT substr(partition_name, 8, 16)
FROM all_tab_partitions
WHERE TABLE_owner IN ( 'DATAMARTCORE' ,'DWHCORE')
AND TO_DATE(substr(partition_name, 8, 10), 'yyyy/mm/dd') <= to_date('2015/05/31', 'yyyy/mm/dd')