Intereting Posts
Как выбрать WHERE NOT EXIST с помощью LINQ? Запрос динамической кросс-таблицы MySQL: выбор дочерних записей в качестве дополнительных столбцов Проблемы с пространственной репликацией данных Spatial Data Запрос на получение записей на основе Radius в SQLite? В чем разница между ключом кандидата и первичным ключом? Момонд и мысли PostgreSql sql-запрос медленный, если используется параметр declare, но быстро, если нет SQLite: полное внешнее соединение с четырьмя таблицами Каков наилучший способ выбрать несколько строк по ID в sql? Предотвращение дублирования результатов в SQL PostgreSQL: SELECT WHERE менее 15 минут postgresql процедура поиска родительской цепочки Oracle: обновление столбца таблицы с использованием ROWNUM в сочетании с предложением ORDER BY Как эффективно создавать базу данных MySQL для моего конкретного случая Могу ли я получить позицию записи в таблице результатов SQL?

TO_CHAR и TO_DATE дают разные результаты. Как достичь функции TO_CHAR с использованием TO_DATE?

SELECT TO_CHAR((select logical_date -1 from logical_date where logical_date_type='B'),'DD/MM/YYYY HH24:MI:SS') FROM DUAL; 

Этот запрос возвращается 23/04/2016 00:00:00

 o/p of select logical_date -1 from logical_date where logical_date_type='B' :4/23/2016 SELECT TO_DATE((select logical_date -1 from logical_date where logical_date_type='B'),'DD/MM/YYYY HH24:MI:SS') FROM DUAL; 

Этот запрос возвращает 4/23/0016 .

Как получить формат, заданный TO_CHAR с помощью TO_DATE?

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

    Во втором примере вы делаете неявное преобразование своей фактической даты в строку, используя настройку NLS – теряя столетие в процессе, поэтому предположительно это имеет YY, а не YYYY, – и затем вы конвертируете это обратно в дату. Я удивлен, что это не ошибка, поскольку вы меняете месячные и дневные позиции.

    Не делай этого. Преобразование в строку и обратно к дате бессмысленно, даже если ваши настройки не теряют информацию на этом пути.

    Если вы хотите, чтобы это как дата для клиента или другого процесса, который нужно использовать, выполните:

     select logical_date -1 from logical_date where logical_date_type='B' 

    Если вы хотите сравнить с другой датой, то оставите ее как дату:

     select other_columns from logical_date where logical_date_type='B' and logical_date -1 < sysdate 

    Если вы хотите указать формат отображения, используйте:

     select to_char(logical_date -1, 'DD/MM/YYYY') from logical_date where logical_date_type='B' 

    Проблема связана с форматом даты по умолчанию для вашего сеанса, который настроен в настройках клиента oracle. Чтобы проверить настройки NLS_DATE_FORMAT для сеанса

     SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_DATE_FORMAT' 

    вот как вы можете изменить этот параметр для своей сессии для достижения желаемых результатов:

     alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS';