2010-10-04 5 views
3
SELECT DECODE (SYSDATE, SYSDATE + 1, NULL, SYSDATE) 
    FROM DUAL; 


SELECT DECODE (SYSDATE, SYSDATE + 1, TO_DATE (NULL), SYSDATE) 
    FROM DUAL; 

Почему я получаю результаты в разных форматах из запросов выше?Результаты функции декодирования Oracle с различными форматами

Я использую Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

+0

Можете ли вы пояснить, что вы подразумеваете под «различными форматами»? Что именно вы видите, эти два запроса возвращаются? –

+0

Проблема - это нулевое значение. Какой тип данных? Второй запрос вернет дату. Для первого запроса это varchar2 (8). – Rene

+0

Извините Justin, первый запрос обрезает возвращаемое значение sysdate, второй возвращает его с его часами, min и т. Д. Но я думаю, что Рене уже решил мою проблему :) – mutoss

ответ

5

результат функции decode имеет тип данных третьего параметра. В первом случае, поскольку тип данных не указан для NULL, используется VARCHAR2 по умолчанию. Во втором случае DATE запрашивается, и поэтому результатом является дата.

Другими словами, первый запрос так же, как:

SELECT DECODE(SYSDATE, SYSDATE + 1, to_char(NULL), to_char(SYSDATE)) FROM DUAL; 

Вывод этого запроса будет отформатирован в соответствии с вашими NLS_DATE_FORMAT параметра сеанса, в то время как второй запрос возвращает дату, которая будет отображаться в соответствии с настройками вашего клиента.

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