我有这样的查询
SELECT b.id, b.publisher_id, b.name, b.size, b.present,
b.display, d.book_id AS download,
b.download_date
FROM books b
LEFT JOIN downloads d ON d.book_id=b.id
WHERE b.download_date = CURRENT_DATE
ORDER BY b.id
LIMIT 10 OFFSET 0
我的数据库中有这个条目。
id(bigserial) publisher_id(bigint) name(character varying) size(bigint) present(boolean) display(boolean) download_date(timestamp with time zone)
19;1;"Attacks on and Countermeasures for USB Hardware Token Devices.rar";634764;TRUE;TRUE;"2014-06-10 08:05:28.439+00"
但它没有显示结果。但今天在Windows中2014-06-10
。
有什么问题?
答案 0 :(得分:2)
timestamp
2014-06-10 08:05:28.439+00
不等于date
2014-06-10
。将时间戳截断为一天
WHERE date_trunc('day', b.download_date) = CURRENT_DATE
select date_trunc('day', '2014-06-10 08:05:28.439+00'::timestamp);
date_trunc
---------------------
2014-06-10 00:00:00
答案 1 :(得分:2)
这是因为您将时间戳与日期进行比较。 PostgreSQL不会让您的数据被截断,因此它会将日期转换为时间戳(当天的00:00:00
时间点)来进行比较。
如果您想比较download_date
的日期部分,可以将其投放到date
以获得日期与日期比较:
WHERE DATE(b.download_date) = CURRENT_DATE