如何将 csv 文件中的日期值更改为外部表

问题描述 投票:0回答:1

我需要从作为输入接收的 .csv 文件填充我的外部表。在我的 .csv 文件中,我有 3 个字段,分别是:

  • ORDER_DATE -开始 -结尾 其格式如下:
  • 2023 年 12 月 4 日
  • 2023 年 12 月 4 日晚上 8:00:46
  • 2023 年 12 月 4 日晚上 9:00:46

我想要的是找到一种方法,使用以下格式填充外部表中的数据:

  • 2023 年 4 月 12 日
  • 2023年4月12日08:00
  • 2023/4/12 09:00

我该怎么做?

这就是我创建 EXTERNAL_TABLE 的方式:

    CREATE TABLE EXT_TABLE 
   (
    "JOB" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP", 
    "ORDER_DATE" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP", 
    "START" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP", 
    "END" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP"

   )  DEFAULT COLLATION "USING_NLS_COMP" 
   ORGANIZATION EXTERNAL 
    ( TYPE ORACLE_LOADER
      DEFAULT DIRECTORY "DATA_PUMP_DIR"
      ACCESS PARAMETERS
      ( RECORDS DELIMITED BY DETECTED NEWLINE NOLOGFILE NOBADFILE NODISCARDFILE READSIZE=10000000 CREDENTIAL 'DWH' 
    FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' CONVERT_ERROR REJECT_RECORD DATE_FORMAT DATE MASK 'YYYYMMDDHH24MISS' DATE_FORMAT TIMESTAMP MASK 'YYYYMMDDHH24MISSFF6' NOTRIM MISSING FIELD VALUES ARE NULL   
  )
      LOCATION
       ( 'https://swiftobjectstorage.eu-frankfurt-1.oraclecloud.com/v1/frn2gep9qi8i/INPUT/myfile.csv'
       )
    )
   REJECT LIMIT 25500000 
  PARALLEL ; 
oracle oracle-sqldeveloper external-tables
1个回答
0
投票

我会使用字符串(即你已经做了的,

varchar2
数据类型)。它将允许所有值成为外部表的一部分。我认为这只是 CSV 文件和目标表之间的中间步骤。

在这种情况下,您将在外部表中拥有所有这些值,但是 - 当将它们传输到目标表中的

date
数据类型列时,请使用
to_date
函数,例如

SQL> alter session set nls_date_Format = 'dd.mm.yyyy hh24:mi';

Session altered.

SQL> select
  2    to_date('4/12/2023'      , 'dd.mm.yyyy hh24:mi') val1,
  3    to_date('4/12/2023 08:00', 'dd.mm.yyyy hh24:mi') val2
  4  from dual;

VAL1             VAL2
---------------- ----------------
04.12.2023 00:00 04.12.2023 08:00

SQL>

两个“日期”(带和不带时间部分)均已正确修改为有效的

date
数据类型值。

© www.soinside.com 2019 - 2024. All rights reserved.