Too*_*tje 0 sql postgresql date-arithmetic
我有一个带有表的 Postgres 数据库absences。我正在尝试删除时间戳中包含“2018”的所有记录,如下所示:
DELETE FROM absences WHERE date LIKE '%2018%';
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
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%';
Run Code Online (Sandbox Code Playgroud)
有谁知道如何从缺勤表中删除日期字段中包含“2018”的记录?
小智 5
另一种选择是使用可能使用该列上的索引的条件:
where date >= timestamp '2018-01-01 00:00:00'
and date < timestamp '2019-01-01 00:00:00';
Run Code Online (Sandbox Code Playgroud)
如果您不想编写很长的“时间戳文字”而只想将数字传递给查询,则可以使用make_timestamp()
where date >= make_timestamp(2018,1,1,0,0,0)
and date < make_timestamp(2019,1,1,0,0,0);
Run Code Online (Sandbox Code Playgroud)
如果该值是一个参数,您可以使用:
where date >= make_timestamp(?,1,1,0,0,0)
and date < make_timestamp(? + 1,1,1,0,0,0);
Run Code Online (Sandbox Code Playgroud)
extract 函数也可以工作:
where extract(year from date)::int = 2018
Run Code Online (Sandbox Code Playgroud)
或使用 to_char()
where to_char(date, 'yyyy') = '2018'
Run Code Online (Sandbox Code Playgroud)