当前位置: 首页 > 知识库问答 >
问题:

Oracle 12C-SQL加载器无效月份错误

吕森
2023-03-14
options (skip=1)
load data
truncate
into table test_table
fields terminated by '\t' TRAILING NULLCOLS
( 
  type,
  rvw_date "case when :rvw_date = 'NULL' then null  WHEN       REGEXP_LIKE(:rvw_date, '\d{4}/\d{2}/\d{2}') THEN to_date(:rvw_date,'yyyy/mm/dd')   else to_date(:rvw_date,'mm-dd-yy') end"
)
type     rvw_date
Phone    2014/01/29
Phone    2014/02/13
Field    NULL
Phone    01/26/15
Field    02/25/12

架构:

create table test_table
(
    type varchar2(20),
    rvw_date date
)

共有1个答案

嵇财
2023-03-14

SQL*Loader控制文件似乎将反斜杠解释为转义字符。SQL运算符部分也显示了转义的双引号;它并不明显适用于其他任何东西,但它是有意义的,一个单一的反斜杠总是被认为是转义的东西。

您的正则表达式模式需要对\d进行双转义,以使模式在文件中像在普通SQL中一样工作。目前,模式不匹配,所以所有的值都转到els,这是wrng格式掩码(即使它们都被更正了)。

这是有效的:

options (skip=1)
load data
truncate
into table test_table
fields terminated by '\t' TRAILING NULLCOLS
(
  type,
  rvw_date "case when :rvw_date = 'NULL' then null when REGEXP_LIKE(:rvw_date,'\\d{4}/\\d{2}/\\d{2}') then to_date(:rvw_date,'yyyy/mm/dd') else to_date(:rvw_date,'mm/dd/rr') end"
)
alter session set nls_date_format = 'YYYY-MM-DD';
select * from test_table;

TYPE                 RVW_DATE  
-------------------- ----------
Phone                2014-01-29
Phone                2014-02-13
Field                          
Phone                2015-01-26
Field                2012-02-25
 类似资料:
  • 问题内容: 我使用此查询创建了一个表现 在,当我尝试使用插入一些数据时,遇到此错误。 我做错了什么? 问题答案: 不是日期,而是一个字符串。 当使用session参数的值作为格式掩码将Oracle非日期文字插入到列中时,Oracle将对其进行隐式处理( 注意:这是一个session参数,属于客户端;它不是全局设置 )。如果非日期文字与该格式匹配,则它将起作用(如果不匹配,则它将不起作用)-但是,如

  • 我希望在oracle数据库11.2.0.4版上的PL/SQL ETL进程中插入具有时间戳列的表中的数据 如果在Toad中运行“Create INSERT from seletcted row”,将得到以下SQL命令: 在PL/SQL中,我生成一个varchar2/string,类似于:

  • 我在Oracle DB中有一个列,它是数据类型。存储在此列中的典型值类似于。我试图得到所有的记录,其中该专栏有记录后2015年8月1日。 但是,我得到的是。我哪里做错了?

  • 问题内容: 我在sql中有一个表,如下所示: 我正在尝试插入它: 但是我得到了错误:ORA-01843:无效的月份 这是一个Oracle数据库。我不确定日期格式有什么问题。 问题答案: 目前尚不清楚您想要哪个,因此您可以尝试: 对于月日年格式: 对于日-月-年格式: 另外,建议阅读:Oracle函数:TO_DATE

  • 下面是我的Oracle过程中的代码: 有什么想法吗?