2017-01-06 4 views
0

Когда я выполняю это сравнение, он дает неверный результат.листинг (дата как временная метка) неверное сравнение

select case when cast('06-JAN-17 12.48.14.243000000 PM' as timestamp) > 
      cast('06-JAN-17 08.08.57.000000000 PM' as timestamp) then 1 else 0 end from dual 

Результат: '0' вместо '1'. Может ли кто-нибудь помочь мне, что в этом плохого?

ответ

-1

Прежде всего, вам нужно преобразовать текст в буквальное число до даты, прежде чем вы нажмете его на метку времени. Я покажу вам пример:

select case when cast(to_date('06-01-17 12:48:14', 'DD-MM-YY HH:MI:SS') as timestamp) > cast(to_date('06-01-17 08:08:57', 'DD-MM-YY HH:MI:SS') as timestamp) then 1 else 0 end from dual 

Это Resturns 1. Просто измените мой дословный ваш покорный и формат даты прохождения и ваш результат будет работать.

+0

Выполнение функции 'DATE' в' TIMESTAMP' не имеет смысла в этой области. Для заданных значений, таких как '06-JAN-17 12.48.14.243000000 PM', он будет даже терпеть неудачу, потому что' DATE' не поддерживает дробные секунды. –

0

Вы должны использовать TO_TIMESTAMP, если вам нравится нарисовать строку в TIMESTAMP правильно.

when TO_TIMESTAMP('06-JAN-17 12.48.14.243000000 PM', 'DD-MON-RR HH.MI.SS.FF PM') > 
      TO_TIMESTAMP('06-JAN-17 08.08.57.000000000 PM', 'DD-MON-RR HH.MI.SS.FF PM') 
    then 1 else 0 end