2014-02-25 38 views
0

我有PostgreSQL的一个领域,具有: “时间戳和时区比较”如何将PostgreSQL时间戳中的日期与时区进行比较?

我需要使用的数据范围comparaison从JS

var start = Date.UTC(2012,02,30);//1333065600000 

var end = Date.UTC(2013,02,30); //1364601600000 

导致BIGINT数字:

如何在sql PostgreSQL请求中使用start(1333065600000)和end(1364601600000)?

+0

的_valueOf的JavaScript Dates_是自Unix纪元,'星期四1970年1月1日00:00:00 GMT + 0000(GMT标准时间)' –

+0

使用'TO_TIMESTAMP()的毫秒数'从UNIX转换时代到时间戳。例如:'to_timestamp(1333065600000)' –

回答

1

尝试这样:

select * 
from my_table 
where date_field between to_timestamp(1333065600000) and to_timestamp(1364601600000); 
0

这是基本相同TO_TIMESTAMP,但转换为UTC时区,如果服务器没有在运行UTC。

SELECT * FROM table WHERE date BETWEEN 
    ((TIMESTAMP WITH TIME ZONE 'epoch' + 1333065600 * INTERVAL '1 second') AT TIME ZONE 'UTC') 
    AND 
    ((TIMESTAMP WITH TIME ZONE 'epoch' + 1364601600 * INTERVAL '1 second') AT TIME ZONE 'UTC'); 

请注意,JavaScript纪元的准确性是毫秒,而Unix纪元只有几秒。你必须丢弃输入值中的最后三位数字(就像我在上面的例子中那样),或者除以1000(下面的例子)。

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1333065600000/1000 * INTERVAL '1 second') AT TIME ZONE UTC; 
相关问题