pg-обещание, как выбрать с помощью где … как дата%

#node.js #postgresql #pg-promise

#node.js #postgresql #pg-обещание

Вопрос:

Я немного застрял, пытаясь получить выбор из следующего:

 id(int)  balance(int)  datetime(timestamp without timezone)
7        153           "2020-08-24 20:15:49"
8        115           "2020-08-24 20:16:13"
9        105           "2020-08-24 20:17:14"
  

Я хочу выбрать выполнение этого

 let date = moment().format("YYYY-MM-DD")
console.log(date) // 2020-08-24
let selectAddressSnapshotByDate = new PQ({text: "SELECT balance, datetime FROM table where datetime like '$1%' ", values: [date.toString()]})
  

Я в основном хочу получить значения, дата-время которых начинается со значения даты в программе

Прямо сейчас я получаю следующую ошибку:

ошибка: оператор не существует: временная метка без часового пояса ~ ~ неизвестно

Комментарии:

1. LIKE используется только для строковых значений, а не для дат или временных меток

Ответ №1:

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

Затем: если вы хотите иметь дело с датами, тогда используйте функции даты, а не строковые функции, такие как like .

Я бы сформулировал ваш запрос как:

 select balance, datetime 
from table 
where datetime >= $1::date and datetime < $1::date   '1 day'::interval
  

Ответ №2:

Вероятно, проблема возникает из-за того, что у вас есть информация о времени в виде метки времени, но для этого требуется, чтобы у вас был TIMESTAMPTZ. Если это будет для вас полезно