Формат даты по умолчанию Oracle - YYYY-MM-DD, ПОЧЕМУ?

Формат даты по умолчанию Oracle - YYYY-MM-DD. Что означает, если я это сделаю:

 select some_date from some_table

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

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

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

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

Ответ 1

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

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

Ответ 2

Вы уверены, что не смешиваете базу данных Oracle с Oracle SQL Developer?

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

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

Ответ 3

Формат YYYY-MM-DD является частью ISO8601 стандарта обмена информацией о дате (и времени).

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

В целом люди сопротивляются чему-то другому, но есть много хороших международных причин для него.

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Формат даты: ГГГГ-ММ-ДД HH24: MI: SS

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

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

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

Ответ 11

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

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

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

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

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

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