@givemoneybiatch
Немного веб, немного гейм

Почему не работает сравнение по датам?

Есть таблица. Нужно выбрать записи из таблицы ранее чем obj.added - приходящий параметр

create table user_recording(
  "id" serial primary key,
  "userId" serial REFERENCES user (id),  
  "recordingId" serial REFERENCES recording (id) on delete cascade,
  "added" timestamp,
  unique ("userId", "recordingId")
);

Делаю запрос:

SELECT *
    FROM user_recording
    WHERE user_recording."userId" = ${obj.userId} AND user_recording.added::timestamp <= ${obj.added}
    ORDER BY user_recording.added DESC
    LIMIT ${obj.limit};`

Формат приходящего параметра obj.added сейчас moment().utc().valueOf(), т.е. просто timestamp 1523101760446.
Получаю ошибку sql:

error: operator does not exist: timestamp without time zone <= bigint

Как правильно сравнить? Поменять формат входящего параметра не проблема, если что.
  • Вопрос задан
  • 1597 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Сравниваете значения разных типов - таймстамп с числом. Причём, число у вас вовсе не секунд, а миллисекунд.

Замените user_recording.added::timestamp на extract('epoch' from user_recording.added) * 1000.

Или замените ${obj.added} на to_timestamp(${obj.added / 1000}).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы