2016-10-21 3 views
1

Я создал внешнюю таблицу, все выглядит хорошо, за исключением одного формата даты, похоже, что он по умолчанию имеет значение MM/DD/YYYY, но я хочу, чтобы он был как YYYYMMDD, как и в файл. Столбец DATE_ID. У кого-нибудь есть подсказки?Параметры формата даты в внешней таблице Oracle

Спасибо!

CREATE TABLE R2SCHD.AAFES_RDF_XTRNL_CAL_HIER 
(
    DATE_ID   DATE, 
    DATE_DESC   DATE, 
    WEEK_ID   VARCHAR2(25 BYTE), 
    WEEK_DESC   DATE, 
    MNTH_ID   VARCHAR2(25 BYTE), 
    MNTH_DESC   VARCHAR2(25 BYTE), 
    QRTR_ID   VARCHAR2(25 BYTE), 
    QRTR_DESC   VARCHAR2(25 BYTE), 
    HALF_ID   VARCHAR2(25 BYTE), 
    HALF_DESC   VARCHAR2(25 BYTE), 
    YEAR_ID   VARCHAR2(25 BYTE), 
    YEAR_DESC   VARCHAR2(25 BYTE), 
    DOW_ID   VARCHAR2(25 BYTE), 
    DOW_DESC   VARCHAR2(25 BYTE) 
) 
ORGANIZATION EXTERNAL 
    ( TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY R2SCHD_STATIC_DATA 
    ACCESS PARAMETERS 
    (RECORDS DELIMITED BY NEWLINE 
     NOBADFILE 
     NOLOGFILE 
     NODISCARDFILE 
     FIELDS TERMINATED BY ',' 
     MISSING FIELD VALUES ARE NULL 
     (
     DATE_ID CHAR(8) DATE_FORMAT DATE MASK "YYYYMMDD", 
     DATE_DESC CHAR(10) DATE_FORMAT DATE MASK "MM/DD/YYYY", 
     WEEK_ID, 
     WEEK_DESC CHAR(10) DATE_FORMAT DATE MASK "MM/DD/YYYY", 
     MNTH_ID, MNTH_DESC, QRTR_ID, QRTR_DESC, HALF_ID, 
     HALF_DESC, YEAR_ID, YEAR_DESC, DOW_ID, DOW_DESC 
    ) 
    ) 
    LOCATION (R2SCHD_STATIC_DATA:'rdft_cal_external.dat') 
) 
REJECT LIMIT UNLIMITED 
NOPARALLEL 
NOMONITORING; 

ответ

4

Вы создали date_id как тип DATE данных, который правильно. Даты не имеют «формат» - то, что вы видите на экране, с косой чертой, продиктовано настройкой NLS_DATE_FORMAT. Что вы используете - SQL * Plus? Разработчик SQL? Жаба?

Например, в SQL Developer: Инструменты - Настройки - База данных - NLS, и вы увидите (и сможете изменить) формат даты. Это то, что контролирует то, что отображается на вашем экране, а не формат, который вы использовали для своей внешней таблицы (это не поможет вам установить его как «YYYYMMDD»).

+0

Спасибо за ваш ответ, я использую Toad, но есть ли способ, которым я могу просто использовать NLS_DATE_FORMAT только для одного конкретного столбца? Поскольку я не хочу изменять настройки для вывода для всех столбцов. Если это так, изменит ли это только мою сессию. Как это сделать для всех будущих сеансов от всех пользователей? Извините за бомбардировку вопросов. – Adil

+0

Даты, которые хранятся правильно, в формате данных даты в базе данных всегда преобразуются в строку для отображения на экране. (Пока они остаются в базе данных, это не влияет!) Если вы не указали явную команду to_char(), Oracle сделает это за вас. Для показа на экране почти всегда лучше использовать to_char с явным форматом даты, например to_char (date_id, 'YYYYMMDD'). Тогда вам не нужен параметр NLS_DATE_FORMAT. Но тогда ваш SELECT не может просто быть SELECT * FROM ... (что в любом случае плохой практикой). – mathguy