Формат даты по умолчанию Oracle: ГГГГ-ММ-ДД, ПОЧЕМУ? - PullRequest
67 голосов
/ 03 декабря 2009

Формат даты по умолчанию Oracle - ГГГГ-ММ-ДД. Что означает, если я сделаю:

 select some_date from some_table

... Я теряю часть времени моей даты.

Да, я знаю, что вы можете "исправить" это с помощью:

 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

А если серьезно, почему не является значением по умолчанию? Особенно в СУБД, где два основных типа данных для отслеживания времени (DATE и TIMESTAMP) оба имеют компонент времени, который включает (как минимум) точность до 1 секунды.

Ответы [ 12 ]

1 голос
/ 27 марта 2013

Oracle имеет типы данных Date и Timestamp.

Согласно документации Oracle , существуют различия в размерах данных между датой и отметкой времени, поэтому, когда предполагается наличие поля «Только дата», имеет смысл показать форматирование даты. Также «У него нет дробных секунд или часового пояса». - так что это не лучший выбор, когда требуется информация о метках времени.

Поле даты можно легко отформатировать для отображения компонента времени в Oracle SQL Developer - Запрос даты, запущенный в PL / SQL Developer, показывает время, но не отображается в Oracle SQL Developer . Но он не будет отображать доли секунды или часовой пояс - для этого вам понадобится тип данных Timestamp.

0 голосов
/ 21 июня 2018

Чтобы ответить на ваш вопрос, ПОЧЕМУ дата по умолчанию не отображает часть ВРЕМЯ, единственный ответ, который я нахожу, -

Команды Oracle состоят из разработчиков LAZY или ответственных лиц: -)

Почему?

Поскольку в SQL существуют типы данных DATE, TIME и DATETIME, а Oracle еще не реализовала их !!!

Это позор для Oracle.

Но правильным решением вашей проблемы является не определение формата по умолчанию FIX, а SIGNIFICANT формат по умолчанию, который отображает только значащие цифры, так что отображаемые значения DATE, TIME или DATETIME (по умолчанию) всегда содержат все важные цифры.

Пример:

2015-10-14          will be displayed as 2015-10-14 (or default DATE format)
2018-10-25 12:20:00 will be displayed as 2018-10-25 12:20
1994-04-16 16       will be displayed as 1994-04-16 16

Принцип прост.

Все цифры, являющиеся частью DATE, всегда будут отображаться как INTEGER часть числа с плавающей запятой. Для части TIME будет отображаться только значимая часть, как для части DECIMAL в номере с плавающей запятой. Естественно, для типа TIME (только ЧЧ: ММ: СС) часть DATE никогда не отображается.

...