2012-03-18 3 views
1

Я генерирую фиктивные данные для базы данных, один атрибут использует TIMESTAMP(6).TIMESTAMP (6) Oracle Insert

Может ли кто-нибудь дать мне пример того, как выглядит значение?

Кроме того, я хотел бы иметь возможность вставить дату по

03/18/2012 02:35 AM

т.е.

так, что он выглядит как

INSERT INTO FLIGHT VALUES (1,'London Heathrow','Miami Airport','03/18/2012 02:35 AM','04/18/2012 13:35 PM'); 

Возможно ли это? Большое спасибо ...

EDIT ----

Как я могу избавиться от колонки меток времени массивного космического

space

+0

Я использую 'TIMESTAMP (0)', но как-то колонна dept_time имеет массивное пространство, см выше рис, как я могу избавиться от этого ? –

+2

Ваше задание задает другой вопрос. SO предназначен для предоставления дискретных ответов на сфокусированные вопросы. Если у вас есть новая проблема, задайте новый вопрос. Нет никакой платы за задание вопросов, и у вас гораздо больше шансов получить ответ (хотя я заметил, что Джастин фактически обратился к вашему второму вопросу в своем ответе). – APC

+0

Хорошо, имейте это в виду, однако эти два были связаны друг с другом, я не видел смысла в открытии нового вопроса. Спасибо, Justin hes a ace;) –

ответ

6

Всякий раз, когда вы имеете дело с DATE или TIMESTAMP типов данных, всегда должны вставлять значения DATE или TIMESTAMP. Вы не должны вставлять строки и полагаться на неявные преобразования, чтобы преобразовать строку в DATE или TIMESTAMP. Вы должны явно указывать TO_DATE или TO_TIMESTAMP. Ваш оператор INSERT также должен явно указывать имена столбцов, в которые вы вставляете.

Вы хотели ваше INSERT заявление выглядеть как этот

INSERT INTO FLIGHT(<<list of columns>>) 
    VALUES (1, 
     'London Heathrow', 
     'Miami Airport', 
     to_timestamp('03/18/2012 02:35 AM', 'MM/DD/YYYY HH:MI AM'), 
     to_timestamp('04/18/2012 13:35 PM', 'MM/DD/YYYY HH:MI AM')); 

Вы можете настроить, как SQL * Plus отображает данные в определенном столбце, изменив маску формата. Например,

SQL> column dept_time format a30; 
SQL> column arrv_time format a30; 

приведет к SQL * Plus для отображения как DEPT_TIME и ARRV_TIME в 30 горизонтальных символов (ваш текущий NLS_TIMESTAMP_FORMAT появляется для создания 28 символьных строк, если вы измените свое NLS_TIMESTAMP_FORMAT, вы можете изменить ширину столбца «запрос на SQL * Plus»).

+0

Еще раз спасибо Джастин, поэтому отметка времени и дата - это фактически одна и та же? –

+0

@JoseDavidGarciaLlanos - «DATE» хранит время до второго. «TIMESTAMP» может хранить до 9 цифр дробных секунд. Вы также можете объявить «TIMESTAMP WITH TIME ZONE» или «TIMESTAMP WITH LOCAL TIME ZONE», который также хранит часовой пояс, чтобы вы могли конвертировать время из одного часового пояса в другой. –

+0

ah ОК спасибо, я получаю большое количество неиспользуемого пространства для этих столбцов, используя отметку времени, вы можете увидеть ее на картинке выше. это исправление, или так оно и должно быть.Спасибо Justin –

1

Пожалуйста, посмотрите на следующий пример:

ALTER SESSION SET nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS'; 

SELECT * 
FROM orders 
WHERE ordered_at 
    BETWEEN '2013-10-06 12:00:00' 
     AND '2013-10-06 16:00:00'