我有一个带有表absences
的Postgres数据库。我正在尝试删除所有时间戳中带有“ 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”的记录吗?
答案 0 :(得分:3)
另一种选择是使用可能会利用该列上的索引的条件:
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'
答案 1 :(得分:1)
也许date_trunc
是最简单的方法:
WHERE date_trunc('year', date) = TIMESTAMPTZ '2018-01-01 00:00:00'
extract
也是一个不错的主意,但是它返回一个double precision
,对于将它们与=
进行比较,我感到不安。
答案 2 :(得分:0)
感谢您的帮助。我使用此查询解决了我的问题:
从缺勤中删除WHERE EXTRACT(从“日期”开始的年份)= 2018;