【发布时间】:2016-02-08 12:53:26
【问题描述】:
我有以下查询 (BOCRTNTIME - varchar e.g 2015-02-28 12:21:45, VIEW_BASE_MARIX_T - some view):
select BOCRTNTIME
from VIEW_BASE_MARIX_T
where to_date(substr(BOCRTNTIME,1,10),'YYYY-MM-DD')
between (to_date ('2016-01-01', 'YYYY-MM-DD'))
and (to_date ('2016-02-01', 'YYYY-MM-DD'))
执行时出现错误:
ORA-01839: "date not valid for month specified"
我认为BOCRTNTIME中可能有不正确的数据,所以执行以下查询:
select distinct
substr(BOCRTNTIME,1,8),
substr(BOCRTNTIME,9,2)
from VIEW_BASE_MARIX_T
order by substr(BOCRTNTIME,9,2);
但一切看起来都很好:http://pastebin.com/fNjP4UAu。 以下查询也执行没有任何错误:
select to_date(substr(BOCRTNTIME,1,10),'YYYY-MM-DD')
from VIEW_BASE_MARIX_T;
我已经尝试将trunc() 添加到所有to_date() 但没有运气。我还创建了 pl/sql 过程,该过程采用VIEW_BASE_MARIX_T 的一项一项形式并将其转换为日期 - 一切正常。
任何想法为什么我在第一次查询时出错?
UPD:在视图中使用的表查询工作正常,但在视图中 - 不是
UPD2:我们几乎没有相同产品的环境,但只有一个出现错误
UPD3:问题已通过在视图中使用的表中搜索无效日期解决
【问题讨论】:
-
这个
select substr(BOCRTNTIME,1,10)的选择是"2015-07-"?如果是,那么如果您的错误就是问题所在。它应该包含一个正常工作的天值,例如“2015-07-01”。 BOCRTNTIME 的值是多少? -
您可以发布链接的结果吗?它被我屏蔽了。
-
当您尝试
select to_date(substr(BOCRTNTIME,1,10),'YYYY-MM-DD') from VIEW_BASE_MARIX_T;时,您确定选择了所有行吗?像 SQL-Developer 这样的一些工具只会显示例如50 个结果;该错误可能会在稍后的结果中出现。 -
生成视图的 DDL 语句是什么?
-
@MT0 有视图:pastebin.com/UntX5FfV 和视图中使用的表:pastebin.com/PcFppgAg
标签: sql oracle date-format to-date