Как сделать запрос по дате и времени в postgresql - PullRequest
0 голосов
/ 11 марта 2020

У меня есть таблица, в которой моя дата / время имеют форму: 2020-03-10 22:54:08 Это объект с временными метками. Я пробовал следующий запрос, но не возвращал никаких строк:

select ts from table1 
where cast(ts as timestamp) = '2020-03-10 22:54:08'

ничего не возвращает.

Как выполнить запрос на основе даты и времени в postgressql?

Ответы [ 4 ]

0 голосов
/ 11 марта 2020
Тип

tymestamp по умолчанию содержит также микросекунды, поэтому now(), который, например, равен 2020-03-11 01:56:27.593985, здесь явно не равен 2020-03-11 01:56:27. Если вы не хотите, чтобы ваши данные имели микросекундную точность, объявите ваше поле как ts timestamp(0) NOT NULL DEFAULT now(), что означает «0 десятичных цифр для микросекунд»:

select
    current_timestamp::timestamp as ts,
    current_timestamp::timestamp(2) as ts2,
    current_timestamp::timestamp(0) as ts0;

            ts             |          ts2           |         ts0         
---------------------------+------------------------+---------------------
 2020-03-11 02:02:52.98298 | 2020-03-11 02:02:52.98 | 2020-03-11 02:02:53
0 голосов
/ 11 марта 2020

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

0 голосов
/ 11 марта 2020

Чтобы получить данные из базы данных, вам нужно обратиться к SQL SELECT синтаксис . В вашей ситуации столбец ts уже является меткой времени, поэтому нет необходимости использовать cast(). Имейте в виду, однако, что тип timestamp содержит доли секунды (т. Е. 2020-03-10 22:54:03.xxx), поэтому было бы лучше использовать оператор сравнения (>, <, >= или <=)

Вы можете получить все столбцы, используя синтаксис *:

select *
from my_table
where ts >= '2020-03-10 22:54:08';
0 голосов
/ 11 марта 2020

На самом деле это сработало.

select distinct(ts) from my_table where ts >= '2020-03-10 22:54:08' and ts <= '2020-03-10 22:54:09'

Но это не дает мне целые строки

Но потом я попробовал это, и это сработало:

select ts from table1
where to_char(ts,'YYYY-MM-DD HH24:MI:SS') = '2020-03-10 22:54:08'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...