我有一个postgres表,它将创建的时间戳存储在 created_date DATE
列和a created_time INT
从午夜开始保持秒数的列。
编辑:该表位于客户的生产数据库中,并存储来自旧系统的数据,因此不可能更改模式。
我想根据创建的时间戳进行选择。
在mysql中,我会写道:
SELECT * FROM MyCustomers
WHERE ADDTIME(created_date,SEC_TO_TIME(created_time)) > 'sometimestampliteral'
在postgresql中会是什么样子?
我可以在手册中看到示例,但它们都使用文本值,而不是表列中的值。
3条答案
按热度按时间zvms9eto1#
在坚持你的设计的同时
假设iso格式
'somedateliteral'
.既然它应该是一个时间戳文本,我就给它命名
'timestamp_literal'
相反。CREATE INDEX multicolumn_created ON mycustomers (created_date, created_time);
BEGIN;
-- drop all depending objects: indexes, views, ...
ALTER TABLE mycustomers
ALTER created_date TYPE timestamp
USING (created_date + make_interval(secs => created_time))
, DROP COLUMN created_time;
ALTER TABLE mycustomers RENAME created_date TO created_at; -- or whatever
-- recreate all depending objects: indexes, views, ...
COMMIT;
SELECT * FROM mycustomers WHERE created_at > 'somedateliteral';
7lrncoxx2#
把两者加起来:
ql3eal8s3#
你可以用
make_interval()
把秒变成一个间隔,这个间隔又可以加到date
构造适当的timestamp
: