Oracle to_date SQL форматирование странное поведение - PullRequest
0 голосов
/ 23 июня 2010

Я просмотрел сайт SO, думая, что это довольно очевидно, но, увы, я еще не нашел его. В основном, установка выглядит следующим образом:

У меня есть строка в таблице:

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')

но мне нужно, чтобы select возвращал формат даты (MM/DD/YYYY HH24:MI:SS), а не строку. Как я могу это сделать?

Edit: Реальный выход:

22.06.2010 00: 00: 00

Желаемый вывод (в формате даты):

06/22/2010 00: 00: 00

Ответы [ 2 ]

5 голосов
/ 23 июня 2010

ДАТА не имеет формата, она форматируется только при преобразовании в строку символов для отображения. Если вы используете SQL Plus, то при отображении столбца DATE (без использования 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, то любой инструмент, который вы используете, будет делать что-то похожее и может иметь другой способ указать формат даты для отображения.

3 голосов
/ 23 июня 2010

a Дата - это момент времени, она не имеет формата (например, числа: у них нет формата).Когда вы отображаете дату, очевидно, что она должна получить формат: если вы специально не предоставляете Oracle формат, будет использоваться формат по умолчанию для вашего сеанса (параметр сеанса NLS_DATE_FORMAT).

Следовательно: используйтетип данных DATE для арифметики и хранения данных (без формата).Используйте функцию to_char или что-то подобное, когда вам нужно отобразить дату (в отчете или в графическом интерфейсе).

...