Как удалить записи, где отметка времени равна 2018 - PullRequest
0 голосов
/ 18 января 2019

У меня есть база данных Postgres с таблицей absences. Я пытаюсь удалить все записи, у которых есть '2018' в их временной метке как это:

DELETE FROM absences WHERE date LIKE '%2018%';

но я получаю это сообщение об ошибке:

absence-registrator_production=> DELETE FROM absences WHERE date LIKE '2018%';
ERROR:  operator does not exist: timestamp without time zone ~~ unknown
LINE 1: DELETE FROM absences WHERE date LIKE '2018%';

Кто-нибудь знает, как удалить записи из таблицы отсутствий, которые имеют '2018' в поле даты?

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Другой вариант - использовать условие, которое потенциально может использовать индекс для этого столбца:

where date >= timestamp '2018-01-01 00:00:00' 
  and date < timestamp '2019-01-01 00:00:00';

Если вы не хотите писать длинный «литерал метки времени» и просто передавать число в запрос, вы можете использовать make_timestamp()

where date >= make_timestamp(2018,1,1,0,0,0) 
  and date < make_timestamp(2019,1,1,0,0,0);

Если это значение является параметром, вы можете использовать:

where date >= make_timestamp(?,1,1,0,0,0) 
  and date < make_timestamp(? + 1,1,1,0,0,0);

Функция извлечения также будет работать:

where extract(year from date)::int = 2018

или используя to_char ()

where to_char(date, 'yyyy') = '2018'
0 голосов
/ 18 января 2019

Спасибо за помощь. Я использовал этот запрос, чтобы решить мою проблему:

УДАЛИТЬ ОТ ОТСУТСТВУЮЩИХ ГДЕ ЭКСТРАКТ (год ОТ "дата") = 2018;

0 голосов
/ 18 января 2019

Может быть date_trunc самый простой способ:

WHERE date_trunc('year', date) = TIMESTAMPTZ '2018-01-01 00:00:00'

extract тоже хорошая идея, но она возвращает double precision, и я нервничаю из-за того, что сравниваю их с =.

...