计算间隔中的日期数,使用之间的postgress时间戳记始终返回0条记录

时间:2018-01-01 16:37:52

标签: java postgresql

我有一张简单的postgress表。

CREATE TABLE "SCHEMA".testdate
(
    data timestamp without time zone NOT NULL
)

我的内容包含以下数据:

'2018-01-01 14:13:48.991'
'2018-01-01 14:13:49.835'
'2018-01-01 14:13:51.135'
'2018-01-01 14:14:48.068'
'2018-01-01 14:14:49.08'
'2018-01-01 14:14:50.03'
'2018-01-01 14:14:50.952'
'2018-01-01 14:14:51.794'
'2018-01-01 14:14:52.671'
'2018-01-01 14:14:53.552'
'2018-01-01 14:14:54.997'

我尝试使用此查询来查找特定时间间隔内的日期数:

SELECT COUNT(1) NUMBER FROM  "SCHEMA".TESTDATE WHERE  DATA BETWEEN to_date('01-01-2018 14:13:43','dd-mm-yyyy hh24:mi:ss')
and to_date('01-01-2018 15:13:45','dd-mm-yyyy hh24:mi:ss');

为什么这会返回0条记录? 我也尝试从java使用PreparedStatement setTimestamp方法代替示例中的两个日期和同样的问题。

 Date now=new Date();
 Date oneHourEarly=UTILS.addHours(now,-1);
 ps.setTimestamp(1, new Timestamp(((java.util.Date) now).getTime()));
 ps.setTimestamp(2, new Timestamp(((java.util.Date) oneHourEarly).getTime()));

我做错了什么?我正在使用PostgresSQL版本9.6。

1 个答案:

答案 0 :(得分:3)

to_date()返回date(没有时间)而不是timestamp。因此,两个函数都返回相同的日期2018-01-01

您需要使用to_timestamp()

select count(*) as number 
FROM testdate 
WHERE DATA BETWEEN to_timestamp('01-01-2018 14:13:43','dd-mm-yyyy hh24:mi:ss') and to_timestamp('01-01-2018 15:13:45','dd-mm-yyyy hh24:mi:ss');

我更喜欢to_timestamp(或to_date)函数的标准SQL ISO时间戳文字

select count(*) as number 
FROM testdate 
WHERE DATA BETWEEN timestamp '2018-01-01 14:13:43' and timestamp '2018-01-01 15:13:45';

在线示例:http://rextester.com/ARXQ27306