ДАТА / ВРЕМЯ в оракуле - функция продолжительности даты - PullRequest
2 голосов
/ 02 марта 2012

Я пытаюсь создать функцию, которая может вычитать между 2 датами, но у меня возникают некоторые проблемы:

Во-первых, с сохранением даты, во-вторых, с функцией.

Вот мой код для сохранения даты в таблице:

CREATE TABLE car_info
  (
   car_id NUMBER(4)
   arrival DATE,
   departure DATE
   ......
  )

здесь я сохранил время прибытия / отправления как ДАТЫ. В идеале я хочу его в формате dd-mon-yyy-hh-mm-ss

Здесь я сталкиваюсь с первой проблемой:

INSERT INTO car_info 
VALUES('0001', to_date('12-jun-2006 06:00:01'), to_date('14-jun-2006 09:00:01')

Из проведенного мною исследования это кажется правильным?

однако, если я сделаю SELECT * FROM car_info, это результат:

car_id       arrival_date      departure_date
   1          12-jun-2006        14-jun-2006

Кто-нибудь знает, почему он не отображает результат в виде полной даты и времени?

Чтобы эта публикация не была переполнена информацией, как только я решу эту проблему, я опубликую свои проблемы с этой функцией.

Спасибо за любую помощь

С наилучшими пожеланиями, Даррен

Вторая часть вопроса была перемещена в Oracle sql - вычитание даты в функции

Ответы [ 3 ]

3 голосов
/ 02 марта 2012

ДАТА в Oracle - это момент времени, он не сохраняется в формате. Формат выбирается при отображении даты, чтобы ее могли понять люди.

ДАТА по умолчанию будет отображаться в соответствии с настройкой NLS_DATE_FORMAT. Вы можете изменить этот параметр с помощью следующей команды:

ALTER SESSION SET NLS_DATE_FORMAT='dd-mon-yyyy hh24:mi:ss';

Вы также можете запросить явный формат, используя TO_CHAR в своем запросе:

SELECT to_char(arrival, 'dd-mon-yyyy hh24:mi:ss')
  FROM car_info
2 голосов
/ 02 марта 2012

Oracle хранит даты в двоичном внутреннем представлении, поэтому способ их ввода и формат, который вы извлекаете, можно задать на уровне сеанса, базы данных или запроса.

Обычно при вставке даты следует явно форматировать.для предотвращения любых неявных ошибок преобразования:

INSERT INTO car_info  
VALUES('0001', 
       to_date('12-jun-2006 06:00:01'), 
       to_date('14-jun-2006 09:00:01'))

Должно быть:

INSERT INTO car_info  
VALUES('0001', 
       to_date('12-jun-2006 06:00:01', 'dd-mon-yyyy hh24:mi:ss'), 
       to_date('14-jun-2006 09:00:01', 'dd-mon-yyyy hh24:mi:ss'))

РЕДАКТИРОВАТЬ: модели формата для дат Oracle и т. д. здесь .

2 голосов
/ 02 марта 2012

Столбец DATE содержится в базе данных, закодированной в 7 байтов, а не в виде отформатированной строки.Когда вы выбираете столбец DATE из базы данных, клиентский инструмент, который вы используете, должен отформатировать его, чтобы отобразить его осмысленным образом.Это делается с использованием маски формата по умолчанию.Как вы установите это, зависит от инструмента, который вы используете.В SQL Plus вы можете сделать это:

alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';

Или вы можете отформатировать дату yoursefl в запросе, используя TO_CHAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...