我们正在从SQL Server SSIS包中调用Oracle视图。当我们从SSIS引用此视图时,我们收到以下ORA-01858错误。该视图在Oracle中没有访问任何问题。
ORA-01858:在需要数字的地方找到了非数字字符
我已经缩小到我们从varchar2 flex字段引入数据的列,如下所示。这个varchar2字段存储的是日期,我正在进行如下所示的转换。 Oracle对此没有任何问题。自从开始从SQL Server调用此错误以来,我们一直在遇到此错误。
to_char(to_date(substr(wdj.dff_detail,1,9)),'YYYYMM')
谢谢。
答案 0 :(得分:1)
我们缺少一些关键信息:您究竟将什么存储到该列中?我知道,它是代表日期值的字符串,但是-哪种格式?
查看您发布的代码,看来日期值占据了该字符串的前9个字符,所以我假定为dd-mon-yy
。
如果是这样,那么请看以下示例:
SQL> alter session set nls_date_language = 'english';
Session altered.
SQL> with wdj (dff_detail) as
2 (select '06-mar-20 20:31' from dual union all
3 select '25-aug-19 13:30' from dual
4 )
5 select
6 substr(dff_detail, 1, 9) sbstr,
7 to_date(substr(dff_detail, 1, 9), 'dd-mon-yy') dsbstr,
8 to_char(to_date(substr(dff_detail, 1, 9), 'dd-mon-yy'), 'yyyymm') ymdbstr
9 from wdj;
SBSTR DSBSTR YMDBST
------------------------------------ -------- ------
06-mar-20 06.03.20 202003
25-aug-19 25.08.19 201908
SQL>
yyyymm
格式显示日期(通过to_char
函数)当然,如果任何值都没有遵循我假定的格式(例如mar-06-20
),如果包含无效值(例如68-abc-83
)等,则不会起作用。
结论?不要将日期存储为字符串。