2010-06-23 2 views
0

Я трал сайт SO, думая, что это довольно очевидно, но, увы, я еще не нашел его. В принципе установка выглядит следующим образом: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), а не строка. Как я могу это сделать?

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

22.06.2010 00:00:00

Желаемая выход (в формате Дата):

06/22/2010 00:00:00

+0

Я перечитываю ваш вопрос несколько раз, но не могу понять, что вы хотите. По крайней мере, пожалуйста, добавьте пример желаемого и реального вывода (изменить) Ага, вы имеете в виду форматирование даты по умолчанию, когда формат не задан! – Juraj

+0

Юрай, пожалуйста, ознакомьтесь с моими изменениями. – Rio

ответ

3

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

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

+0

Но как я могу быть в состоянии делать сравнения дат (например, между сегодняшним днем ​​и завтра?) – Rio

+1

@Rio: с операторами сравнения. _like date между сегодняшним днем ​​и завтраом. Если все даты сохраняются как даты, сравнение будет выглядеть как 'trunc (sysdate) <= date_in_question и date_in_question

5

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

Смежные вопросы