2015-03-09 3 views
0

Я загружаю данные в таблицы TPC-H для Oracle, используя функциональность загрузки sqlldr. Например, файл orders.ctl имеет следующее.ORACLE sqlldr LOAD Utility - Формат даты

load data 
INFILE 'orders.tbl' 
INTO TABLE ORDERS 
FIELDS TERMINATED BY '|' 
(O_ORDERKEY, O_CUSTKEY, O_ORDERSTATUS, O_TOTALPRICE, O_ORDERDATE DATE 
'YYYY-MM-DD', O_ORDERPRIORITY, O_CLERK, O_SHIPPRIORITY, O_COMMENT) 

После загрузки данных в таблицу Orders, я считаю, что формат даты не в 'YYYY-MM-DD', но в формате 'DD-MON-YY'. Почему Oracle не использует формат, который я упомянул?

Любые предложения?

Спасибо!

EDIT: Добавление тега java, поскольку оно включает преобразование значения даты, переданного в виде строки, в метод java, чтобы преобразовать его обратно в формат даты. Смотрите комментарий к @Justin Cave ответ.

+0

Даты не имеют «формат». Любой формат, который вы видите, применяется клиентом SQL, который вы используете для просмотра данных. –

ответ

0

A date столбец в Oracle не имеет формата. Строка, представляющая дату, имеет формат. A date всегда хранится в двоичном формате, который не является особенно удобочитаемым для человека. Обратите внимание, что Oracle date также всегда содержит компонент времени, даже если ваш клиент не отображает его.

Я предполагаю, что вы говорите, что, когда вы открываете SQL * Plus на машине, где вы сделали по умолчанию US-английский установки клиента Oracle, подключение к базе данных, и сделать

SELECT o_orderdate 
    FROM orders 

, что дата, которая отображается, находится в формате DD-MON-RR. Это связано с тем, что клиенту необходимо преобразовать date в строковое представление, чтобы отобразить его. Если вы полагаетесь на неявное преобразование типов данных, клиент будет использовать ваш сеанс NLS_DATE_FORMAT для выполнения преобразования. По умолчанию для установки на английском языке в Соединенных Штатах должно быть NLS_DATE_FORMAT «DD-MON-RR». Каждый сеанс имеет свой собственный NLS_DATE_FORMAT, потому что каждый пользователь потенциально хочет отображать даты в другом формате.

Если вы хотите отобразить строковое представление даты в определенном формате, вы хотели бы использовать явные преобразования типов данных с использованием функции to_char

SELECT to_char(o_orderdate, 'YYYY-MM-DD') 
    FROM orders 
+0

Проблема, с которой я столкнулся, заключается в следующем. Я передаю значения даты как строку в java-метод, а затем конвертирую с помощью java.sql.Date.valueOf (strVal). Этот метод ожидает строку в формате YYYY-MM-DD или выдает ошибку. Теперь я не знаю, какая дата формата хранится в базе данных Oracle, поэтому я не могу использовать форматтер в java. Любой выход из этого? – user2761431

+1

@ user2761431: do *** нет *** даты передачи как строки. Используйте 'java.sql.Timestamp' и передайте его в свой preapred-оператор, используя' PreparedStatement.setTimestamp() ' –

Смежные вопросы