0

这是我正在使用的查询

select * from (
select table_name, to_number(to_char(trunc(to_date(substr(table_name,instr(table_name,'_',-1,2)+1,8),'yyyymmdd')),'J')) as t_date, to_number(to_char(trunc(sysdate),'J')) as s_date
  from user_tables
 where table_name like 'WORLD_RI%' and table_name not like 'WORLD_RI_ERROR%' )
where t_date < s_date;

我明白了

ORA-01841: (完整)年份必须介于 -4713 和 +9999 之间,而不是 0

包含最后一个 where 子句 ( where t_date < s_date) 的错误。另外仅供参考,table_name 通常类似于WORLD_RI_1234_20120301_1.

任何帮助或建议表示赞赏。

4

2 回答 2

1

我建议只运行这部分

select table_name
, substr(table_name,instr(table_name,'_',-1,2)+1,8) as t_date
from user_tables
where table_name like 'WORLD_RI%' 
and table_name not like 'WORLD_RI_ERROR%'

然后手动检查数据中的奇怪值

编辑:

如果该部分有效 - 然后尝试这部分

select table_name
, to_date(substr(table_name,instr(table_name,'_',-1,2)+1,8),'yyyymmdd')   
from user_tables
where table_name like 'WORLD_RI%' 
and table_name not like 'WORLD_RI_ERROR%'
于 2012-04-17T11:46:00.820 回答
0

我想我明白了!!

这段代码就像一个魅力......在日期字符串上添加一个翻译就可以了!感谢您的所有帮助。

select * from (
select table_name , to_date(substr(table_name,instr(table_name,'_',-1,2)+1,8),'yyyymmdd') as T_DATE , trunc(sysdate) s_date
  from user_tables
 where table_name like 'WORLD_RI%' and table_name not like 'WORLD_RI_ERROR%'
   and translate(substr(table_name,instr(table_name,'_',-1,2)+1,8),'0123456789','$$$$$$$$$$') = '$$$$$$$$'
) where T_DATE < s_date ;
于 2012-04-18T06:49:23.400 回答