回答

收藏

ORA-01839在where子句中的to_date“日期在指定的月份无效”

技术问答 技术问答 199 人阅读 | 0 人回复 | 2023-09-12

我有以下查询(BOCRTNTIME - varchar e.g 2015-02-28 12:21:45,VIEW_BASE_MARIX_T - someview):: S9 g1 U+ D# z+ ], I9 @: u
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'))执行错误:# V3 ^1 N2 k$ n3 F7 c( T8 |
ORA-01839:  "date not valid for month specified"我认为可能存在不正确的数据BOCRTNTIME,因此,请执行以下查询:1 m; z7 ]7 k  Y" V; }% Q! E
select distinct         substr(BOCRTNTIME,1、8)          substr(BOCRTNTIME,9,2)  from VIEW_BASE_MARIX_T order by substr(BOCRTNTIME,9,2);但一切看起来都很好:http :
: u0 a- C! I% J. B//pastebin.com/fNjP4UAu。同样,以下查询执行也没有错误:
3 V: f1 `  m; h& gselect to_date(substr(BOCRTNTIME,1,10),'YYYY-MM-DD')   from VIEW_BASE_MARIX_T;我试过添加trunc()所有内容,to_date()但是没有运气。另外,我创造了一个pl /
6 [; X  Q& e5 ?; E4 j) Z+ B; D5 Rsql过程,该过程采用一项一项的形式VIEW_BASE_MARIX_T并将其转换为日期-一切正常。你觉得我第一次查询为什么会出错?
) S' |. B8 t2 [. B2 AUPD:视图中使用的表查询正常,但在视图中-不8 M8 H5 g% a" B9 B5 |2 h7 K
UPD2:我们很少使用相同的产品,但我们只能在一种产品上犯错误
. S' a' @0 N! E/ k+ hUPD3:通过在视图中使用的表中搜索无效日期来解决问题
+ [) s" g* X; _4 P7 H$ x2 b' F                                                               
) O/ W, T/ c6 Q* V& j* S) v    解决方案:                                                               
0 |* Z! w, Y% J$ J                                                                我认为可能发生的事情是Oracle将谓词推到视图的基本表。9 \. o, a$ [+ q/ M( Q& b; d
你试过运行查询吗?
" A9 e6 Q- v1 oselect to_date(substr(BOCRTNTIME,1,10),'YYYY-MM-DD') BOCRTNTIMEfrom MY_TABLE而不是查询视图?
& M8 J2 l& Z9 b: c, ~也可使用NO_PUSH_PRED确认提示* h* f1 Y& Z& {* w9 S3 s2 Q
select /*  NO_PUSH_PRED(VIEW_BASE_MARIX_T) */BOCRTNTIMEfrom VIEW_BASE_MARIX_Twhere 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)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则