Postgresql 使用当前\u日期的查询返回0个条目

Postgresql 使用当前\u日期的查询返回0个条目,postgresql,Postgresql,我有这样的疑问 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 LI

我有这样的疑问

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

有什么问题吗?

时间戳
2014-06-10 08:05:28.439+00
不等于
日期
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

时间戳不等于日期。将时间戳截断为一天

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

这是因为你将时间戳与日期进行比较。PostgreSQL不会让您的数据被截断,因此它会将日期转换为时间戳(当天的
00:00:00
time point)来进行比较

如果要比较
download\u date
的日期部分,可以将其转换为
date
以实现日期之间的比较:

WHERE DATE(b.download_date) = CURRENT_DATE

这是因为你将时间戳与日期进行比较。PostgreSQL不会让您的数据被截断,因此它会将日期转换为时间戳(当天的
00:00:00
time point)来进行比较

如果要比较
download\u date
的日期部分,可以将其转换为
date
以实现日期之间的比较:

WHERE DATE(b.download_date) = CURRENT_DATE

你能给出示例数据和表结构吗