Oracle To_date Форматирование SQL Нечетное поведение
Вопрос
Я разговаривал на сайт, думая, что это довольно очевидно, но увы я еще не нашел. В основном установка выглядит следующим образом:
У меня есть строка в столе, как так:
06/22/2010 00:00:00
Я выбираю на нем:
SELECT To_Date(item, 'MM/DD/YYYY HH24:MI:SS') from that_table
так что эффективно я делаю
SELECT To_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS') from that_table
Моя база данных возвращает:
22.06.2010 00:00:00
Теперь я знаю, что могу сделать
to_char(to_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'MM/DD/YYYY HH24:MI:SS')
Но мне нужен выбор, чтобы вернуть формат даты (MM/DD/YYYY HH24:MI:SS
), не строка. Как я могу это сделать?
Редактировать:Реальный вывод:
22.06.2010 00:00:00
Желаемый вывод (в формате даты):
06/22/2010 00:00:00
Решение
Дата - это момент времени, она не имеет формата (например, цифр: у них нет формата). Когда вы отображаете дату, очевидно, что он должен получить формат: если вы не даете Oracle формат, будет использоваться формат по умолчанию для вашего сеанса (параметр сеанса nls_date_format).
В результате: используйте дату данных даты даты арифметики и хранения данных (без формата). Использовать to_char
Функция или что-то эквивалентное при необходимости отображения даты (в отчете или в графическом интерфейсе).
Другие советы
Дата не имеет формата, он отформатирован только при преобразовании в строку символов для целей отображения. Если вы используете SQL Plus, то когда вы отображаете столбец даты (без использования to_char, чтобы явно отформатируйте его), сам SQL Plus выполняет преобразование to_char с использованием настройки nls_date_format:
SQL> select sysdate from dual;
SYSDATE
---------
23-JUN-10
SQL> alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2010-06-23 15:17:12
Если вы не используете SQL Plus, то любой инструмент вы используете, будет делать что-то подобное и может иметь другой способ указать формат даты для отображения.