2017-01-20 5 views
0

Я пытаюсь получить определенный формат даты «DD-пн-YY»Как изменить формат даты «дд-пн-уу» в ​​Oracle

Моя таблица имеет поле даты (birth_dt), который имеет формат по умолчанию «dd/mm/yyyy»

Я не хочу, чтобы результатом был текст (т. е. не хотите использовать to_char()), так как результат должен быть экспортирован в электронную таблицу Excel, а некоторые параметры сортировки делаться бизнесом на основе поля даты.

Я пытался использовать:

SELECT to_date(to_char(t.birth_dt,'dd-Mon-yy'), 'dd-Mon-yy') FROM TABLE t 

, но она по-прежнему дает тот же формат даты, как описано ранее (дд/мм/гггг).

Любая помощь будет высоко оценена.

спасибо.

+0

Что вы подразумеваете под "date field with with the default format of ..."? Является ли 'birth_dt' действительно типом данных DATE, или это VARCHAR2 в формате' 'dd/mm/yyyy''? ** Это не может быть так! ** Если вы не знаете, используйте 'описать t'. – mathguy

ответ

0

to_date(to_char(t.birth_dt,'dd-Mon-yy'), 'dd-Mon-yy') не имеет никакого смысла.

Вы преобразовываете дату в строку, а затем назад к дате.

Даты в Oracle не имеют никакого формата. Формат применяется к ним. Дата отображается в формате вашего инструмента на основе ваших параметров NLS. Вы можете установить их в настройках NLS вашего инструмента.

+0

@mathguy удалил ссылку – GurV

1

Вы, похоже, путаетесь по поводу типа данных DATE. DATE не имеет «формата» (если вы действительно хотите увидеть, как даты хранятся внутри Oracle, вы можете с функцией DUMP() - вы увидите, что внутренний формат не имеет ничего общего с форматными моделями). 'dd/mm/yyyy' и все варианты ТОЛЬКО для представления дат AS STRINGS, а не для чего-либо еще.

Экспорт данных в DATE данных в Excel. Независимо от того, какое форматирование вам нужно в Excel, вы можете сделать это. Независимо от того, что вам нужно делать, сделайте это по дате - для корректного заказа не требуется «форматная модель».

Что касается вашего замешательства: когда вы даете дату (но не при ее экспорте!), Она должна быть преобразована в строку, потому что вы можете только «видеть» символы. Oracle преобразует дату на основе текущего параметра NLS_DATE_FORMAT, но этот параметр не используется (и не имеет значения) либо при order by в поле даты, либо при экспорте в Excel, если вы экспортируете в тип данных DATE (как и должно быть) ,

0

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

Примечание: Настройки Thi будут только remian для текущей сессии. После закрытия сеанса настройки также будут отменены.

SELECT sysdate+ level FROM dual CONNECT BY LEVEL < 10; 

--Now check the NLS_DATE_FORMAT in NLS_SESSION_PARAMEERS table 

SELECT * FROM nls_session_parameters; 

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-Mon-YY';_ 

--Now check the NLS_DATE_FORMAT in NLS_SESSION_PARAMEERS table 

SELECT sysdate+ level FROM dual CONNECT BY LEVEL < 10;