这是我正在使用的查询
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;
我得到了
包含最后一个where子句(ORA-01841 :(完整)年份必须介于-4713和+9999之间,而不是0
where t_date < s_date
)的错误。另外,FYI,table_name通常类似于WORLD_RI_1234_20120301_1
。
感谢任何帮助或建议。
答案 0 :(得分: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%'
答案 1 :(得分: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 ;