Oracle To_date Форматирование SQL Нечетное поведение

StackOverflow https://stackoverflow.com/questions/3102234

  •  29-09-2019
  •  | 
  •  

Вопрос

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

У меня есть строка в столе, как так:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top