Преобразовать метку времени в тип данных даты
SELECT to_date(to_char(SYSTIMESTAMP, 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL;
==> 04-MAR-16
Кто-нибудь может объяснить, почему это утверждение select не приводит к '03/04/2016'?
Как я могу написать свой выбор, чтобы он привел к этому, как тип даты? Я также пытался
SELECT to_date(to_char(trunc(SYSTIMESTAMP), 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL
с тем же результатом.
2 ответа
Когда дата возвращается запросом и отображается, ее, очевидно, нужно каким-то образом отформатировать. Способ форматирования значения типа даты определяется не запросом, а инструментом, который выполняет ваш запрос и отображает результат.
В случае разработчика SQL вы можете установить этот формат следующим образом:
- Выберите меню "Инструменты"> "Настройки".
- В диалоговом окне "Настройки" выберите "База данных"> "NLS" на левой панели.
- Из списка параметров NLS введите "ММ / ДД / ГГГГ"
- Сохрани и закрой
Смотрите также этот вопрос.
Обратите внимание, что для преобразования временной метки в дату вам нужно просто ее урезать: trunc(SYSTIMESTAMP)
, Преобразование его в строку, а затем обратно в дату не требуется.
Вы конвертируете дату и время в строку и возвращаетесь к дате. Ваша система по умолчанию использует формат даты DD-MMM-YY для целей вывода; это нормальное значение по умолчанию для даты в Oracle.
Важно понимать, что внутренняя структура данных для типов даты / времени не имеет ничего общего с тем, как они представлены. Итак, если вы хотите его в другом формате, преобразуйте в строку, используя to_char()
,
Если вы хотите изменить формат по умолчанию, то посмотрите на NLS_DATE_FORMAT
, Документация здесь.