Формат даты Oracle по умолчанию-гггг-ММ-ДД, почему?


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

 select some_date from some_table

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

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

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

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

12 67

12 ответов:

Если вы используете этот запрос для создания входного файла для вашего хранилища данных, то вам нужно отформатировать данные соответствующим образом. По сути, в этом случае вы преобразуете дату (которая имеет компонент времени) в строку. Вам нужно явно отформатировать строку или изменить nls_date_format, чтобы установить значение по умолчанию. В вашем запросе вы можете просто сделать:

select to_char(some_date, 'yyyy-mm-dd hh24:mi:ss') my_date
  from some_table;

вы уверены, что не путаете Oracle database с Oracle SQL Developer?

сама база данных не имеет формата даты, дата выходит из базы данных в сыром виде. Это зависит от клиентского программного обеспечения, чтобы сделать его, и SQL Developer тут используйте YYYY-MM-DD в качестве формата по умолчанию, который почти бесполезен, я согласен.

edit: как было отмечено ниже, SQL Developer можно перенастроить для правильного отображения значений даты, у него просто плохие значения по умолчанию.

формат гггг-ММ-ДД является частью в формате iso8601 стандарт для обмена информацией о дате (и времени).

Это очень храбрый Оракул, чтобы принять ISO стандартный такой, но в то же время, странно, что они не идти.

вообще люди сопротивляются всему другому, но их много хороший Международный причины для него.

Я знаю, что говорю революционер вещи, но мы все должны принять стандарты ISO, даже это мы делаем это немного за раз.

самая большая Пита Oracle - это то, что не имеет формата даты по умолчанию!

в вашей установке Oracle выбрано сочетание локалей и параметров установки (очень разумно!) Гггг-ММ-ДД как формат для вывода дат. Другая установка могла бы выбрать "DD/MM/YYYY" или "YYYY/DD / MM".

Если вы хотите, чтобы ваш SQL был переносим на другой сайт Oracle, я бы рекомендовал вам всегда обертывание TO_CHAR(datecol,'YYYY-MM-DD') или аналогичная функция вокруг каждого столбец даты ваш SQL или альтернативно установить формат defualt сразу после подключения с

ALTER SESSION 
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; 

или аналогичные.

никогда не стоит полагаться на то, что по умолчанию установлено определенное значение, IMHO, будь то форматы дат, форматы валют, режимы оптимизатора или что-то еще. Вы всегда должны устанавливать значение формата даты, которое вам нужно, на сервере, клиенте или в приложении.

в частности, никогда не полагайтесь на значения по умолчанию при преобразовании даты или числовых типов данных для целей отображения, потому что одно изменение в базе данных может нарушить работу вашего приложения. Всегда используйте явное преобразование формат. В течение многих лет я работал в системах Oracle, где формат отображения даты по умолчанию по умолчанию был MM/DD/RR, что сводило меня с ума, но, по крайней мере, заставляло меня всегда использовать явное преобразование.

в большинстве IDE вы можете настроить маску по умолчанию для некоторых данных, таких как дата, валюта, десятичный разделитель и т. д.

Если вы используете Oracle SQL Developer:

инструмент > настройки > база данных > NLS

формат даты: гггг-ММ-ДД ЧЧ24: Ми: СС

Это "проблема" на стороне клиента, а не проблема Oracle.

Это клиентское приложение, которое форматирует и отображает дату этого пути.

в вашем случае это SQL * Plus, который делает это форматирование.
Другие клиенты SQL имеют другие значения по умолчанию.

значение даты в стандарте SQL является гггг-ММ-ДД. Поэтому, хотя Oracle хранит информацию о времени, я предполагаю, что они отображают значение таким образом, который совместим со стандартом SQL. В стандарте существует тип данных TIMESTAMP, который включает информацию о дате и времени.

Я не Пользователь Oracle (ну, в последнее время так или иначе), но...

в большинстве баз данных (и на точном языке) дата не включает время. Наличие даты не означает, что вы обозначаете конкретную секунду на эту дату. Как правило, если вы хотите время, а также дату, это называется меткой времени.

Oracle имеет как дату, так и типы данных Timestamp.

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

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

причина: если вы смотрите на столбец данных с отметкой времени, бит _MOST_IMPORTANT_ информации-это год. Если данные в БД в течение десяти лет, это важно знать. так что год на первом месте.

Это имеет смысл, что месяц придет следующий, то день, час, минута. Объективно, это наиболее логичная последовательность для отображения временных данных.

также имеет смысл, что если вы собираетесь отображать данные по умолчанию, вы должны отображать только самая значительная часть данных, поэтому по умолчанию отображается только Y-M-D. Все остальное может отображаться, но по умолчанию он не загромождает ваш отчет sql.

упорядочение по дате логично, если вы отображаете Y-M-D, потому что оно последовательное. Компьютеры хороши в последовательном, и это выглядит логично.

наконец-то. Ваше предубеждение хотеть M-D-Y-это ваше предубеждение. Не все даже в США используют этот формат. Так что используйте самый логичный формат и не возмущайтесь, когда другие решают чтобы быть логичным по умолчанию.

(Я родился в США, и я не представляю Oracle. Я могу, однако, думать за себя)

чтобы ответить на ваш вопрос, поэтому дата по умолчанию не отображает часть времени, единственный ответ, который я нахожу, -

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

почему ?

потому что дата, время и DATETIME типы данных существуют в SQL и Oracle еще не реализовал его !!!

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

но правильный ответ на вашу проблему заключается не в определении формата исправления по умолчанию, а в Значимый формат по умолчанию, в котором отображаются только значащие цифры, поэтому отображаемые значения даты, времени или даты-времени (по умолчанию) всегда содержат все важные цифры.

пример:

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

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

все цифры, являющиеся частью даты, всегда будут отображаться как целая часть числа с плавающей запятой. Для части времени будет отображаться только значительная часть, как для десятичной части в номере с плавающей запятой. Естественно, для типа времени (только HH: MM: SS), часть даты никогда не отображается.