Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 使用sql loader加载的数据中的日期格式不一致_Oracle_Sql Loader - Fatal编程技术网

Oracle 使用sql loader加载的数据中的日期格式不一致

Oracle 使用sql loader加载的数据中的日期格式不一致,oracle,sql-loader,Oracle,Sql Loader,我正在尝试使用sql加载器将数据加载到一些表中。其中一列“到期日”包含一个日期,其中大多数条目的格式为mm/dd/yyyy,但也有少数条目的格式为dd mon-yy。我当前的.ctl文件将传入数据定义为EXPIRATION\u DATE“MM/DD/YYYY”。当我运行它时,我得到一个错误 记录1:已拒绝-表ORD9\u DISC\u PER\u FEAT\u PLAN\u导入、列过期日期上出现错误。ORA-01858:在需要数字的位置找到非数字字符 我如何解决这个问题 这就是我最终解决这个问题

我正在尝试使用sql加载器将数据加载到一些表中。其中一列“到期日”包含一个日期,其中大多数条目的格式为
mm/dd/yyyy
,但也有少数条目的格式为
dd mon-yy
。我当前的.ctl文件将传入数据定义为
EXPIRATION\u DATE“MM/DD/YYYY”
。当我运行它时,我得到一个错误
记录1:已拒绝-表ORD9\u DISC\u PER\u FEAT\u PLAN\u导入、列过期日期上出现错误。ORA-01858:在需要数字的位置找到非数字字符

我如何解决这个问题


这就是我最终解决这个问题的方法

    EXPIRATION_DATE "DECODE(INSTR(:EXPIRATION_DATE, '- 
    '),0,to_date(:EXPIRATION_DATE,'mm/dd/yyyy'),to_date(:EXPIRATION_DATE,'dd-mon- 
    yyyy'))"

您的示例数据包括日期格式dd mon yyyy,但您没有提到它。可能有一种方法可以在同一列中处理多个日期格式,但在运行SQLLDR之前,将其转换为一致的格式可能更容易。理想情况下,创建数据文件的人应该将数据更正为一致的格式。如果这是不可能的,那么您可能需要做一些事情,比如将数据作为varchar2(即文本)加载到临时表中,然后使用一系列具有不同截止日期筛选器的“insert as select”语句将其转换为正确的格式。您还可以让SQLLoader将“坏”记录放入拒绝文件,然后使用具有不同日期格式的辅助控制文件单独处理。课程:当您将日期保留为任何类型的字符类型时,根本没有办法保证准确性。考虑到“日期”为“11/12/10”,什么是天,什么是月,什么是年?你怎么能肯定?即使是“2020年4月5日”,那是5月4日还是4月5日?即使你有一个“标准”的应该是什么,也没有保证。我建议你创建自己的to_date函数,这样你就可以在你的数据加载中使用它