2013-06-24 2 views
0
select 
    to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >= 
    to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a') 
    and 
    to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') <= 
    to_timestamp('2013-06-24 11:50:00 AM', 'yyyy-MM-dd hh:mi:ss a') as a; 

верно, но:Получить между отметкой времени в PostgreSQL

select 
    to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >= 
    to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a') 
    and 
    to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') <= 
    to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss a') as a 

результат неверен

пожалуйста решить ..

+0

«* пожалуйста, решите проблему *». Пожалуйста, предоставьте подробный вопрос, на который можно ответить, в соответствии с инструкциями, приведенными в новой помощи для пользователей здесь: http://stackoverflow.com/help и руководства по заданию более качественных вопросов PostgreSQL: http://stackoverflow.com/tags/postgresql/info. Что вы пытаетесь достичь? Какой результат вы ожидаете *? Что вы уже пробовали? –

ответ

1

Я проверил ниже запрос, отправленный вами и нашел что функция to_timestamp возвращает результат ниже для сравнения.

----- Ниже запрос возвращает 0 (ieFalse) -----

select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >= to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a') and to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') <= to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss a')as a 


--- Ниже приведены условия для comparison--
Первое условие (this возвращает True) to_timestamp ('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh: mi: ss a') -> 24 июня 2013 10:36:40 +0000 to_timestamp ('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh: mi: ss a') -> 24 июня 2013 10: 20: 00 + 0000


--- Второе условие для сравнения (это возвращает ложь) -
to_timestamp ('2013-06-24 11:36:40 AM', 'YYYY-MM-дд чч: ми: сс а') -> 24 июня 2013 10: 36: 40 + 0000 to_timestamp ('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh: mi: ss a') -> Июнь , 23 2013 23: 50: 00 + 0000


Как вы заметили, здесь второе условие сравнивается 24 июня 2013 года с 23 июня 2013 года, которое возвращает false.

Попытка Ниже запроса, который возвращает истинный результат
/--- Ниже запрос возвращает 1 (ieTrue) ----/

select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh24:mi:ss a') 
>= to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh24:mi:ss a') 
and to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh24:mi:ss a') 
<= to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh24:mi:ss a')as a 

В приведенном выше запросе я использовал формат 24ч для сравнения . (гггг-мм-дд HH24: MI: сс)

меня проверить результат на http://sqlfiddle.com/

Я надеюсь, что это поможет.

Благодаря Jignesh

+0

Диагностический процесс, который вы использовали, хорош, но вывод неправильный. Использование 'hh24' будет неправильно обрабатывать, скажем,' 2:20:00 pm'. Вы действительно хотите заполнить формат индикатора 'am' meridiem. Несмотря на эту ошибку, спасибо за участие и попытку помочь другим. –

+0

Да, это получилось .. Спасибо вам, сэр – user2493093

2

Вы должны использовать "AM" или "PM" не "а", как 12-часовой спецификатора.

to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss am') 

Работать с этим является простым процессом. Вы получаете неожиданное «ложное» из второго запроса. Таким образом, вы оцениваете каждую ветку по отдельности, чтобы увидеть, который один является ложным:

regress=> select 
regress-> to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') >= 
regress-> to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss a'); 
?column? 
---------- 
t 
(1 row) 

regress=> select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a') <= 
regress-> to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss a') as a; 
a 
--- 
f 
(1 row) 

ОК, так что это второй один, который неожиданно не соответствует. Метки времени выглядят как условия должны соответствовать, так что давайте посмотрим на выходе функции to_timestamp на каждом:

regress=> select to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss a'), 
    to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss a'); 
     to_timestamp  |  to_timestamp  
------------------------+------------------------ 
2013-06-24 11:36:40+08 | 2013-06-24 00:50:00+08 
(1 row) 

Ха, вы посмотрите на это.12:50 превратился в 00:50. Задержка в 12 часов предполагает, что PM не распознается. Давайте посмотрим на the documentation:

  • AM, am, PM or pm индикатор полудня (без периодов)

Похоже, что вы хотели am или pm, а не только a, как вы писали в шаблоне времени вы использовали. Попробуем это с исправленным индикатором:

regress=> select to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss am'); 
     to_timestamp  
------------------------ 
2013-06-24 12:50:00+08 
(1 row) 

Это сделало. Верните его обратно в исходный запрос и ...

select 
    to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss am') >= 
    to_timestamp('2013-06-24 11:20:00 AM', 'yyyy-MM-dd hh:mi:ss am') 
    and 
    to_timestamp('2013-06-24 11:36:40 AM', 'yyyy-MM-dd hh:mi:ss am') <= 
    to_timestamp('2013-06-24 12:50:00 PM', 'yyyy-MM-dd hh:mi:ss am') as a 

... возвращает true, как ожидалось. Итак, вы идете, это пошаговое решение проблем. 101.

+0

Да, спасибо. Сэр. Хороший день. – user2493093

+0

@ user2493093 Рад помочь. Надеюсь, у вас также есть информация, которая поможет вам решить будущие проблемы - и придумайте лучшие вопросы, когда вы не можете. Если это помогло, посмотрите http://stackoverflow.com/help/someone-answers. –