Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用PostgreSQL对JSON中的日期使用比较运算符(如BEVERY子句)?_Javascript_Json_Postgresql - Fatal编程技术网

Javascript 如何使用PostgreSQL对JSON中的日期使用比较运算符(如BEVERY子句)?

Javascript 如何使用PostgreSQL对JSON中的日期使用比较运算符(如BEVERY子句)?,javascript,json,postgresql,Javascript,Json,Postgresql,我有一个名为myfield的json列,其中包含一个json文档: {"createDate": 1448067864151, "id": 1, "name": "hello"} 我可以这样提取createDate: SELECT myfield->'createDate' AS dt FROM mytable 我可以使用JavaScript正确查看日期 console.log(new Date(1447734116009)); > 2015-11-17T04:21:56.00

我有一个名为
myfield
的json列,其中包含一个json文档:

{"createDate": 1448067864151, "id": 1, "name": "hello"}
我可以这样提取createDate:

SELECT 
myfield->'createDate' AS dt
FROM mytable
我可以使用JavaScript正确查看日期

console.log(new Date(1447734116009));
> 2015-11-17T04:21:56.009Z
我如何完成这样的任务:

SELECT
*
FROM mytable
WHERE myfield->'createDate' BETWEEN '2015-11-1' AND '2015-11-10'
我还想在提取的日期字段上使用大于和小于运算符

SELECT
*
FROM mytable
WHERE myfield->'createDate' > '2015-11-1'
我不确定如何用PostgreSQL查询语言中的JSON扩展来构造它


基于这一点,Postgres似乎甚至没有JSON的日期操作符。如果没有,是否有其他方法(如使用自定义函数)将序列化日期转换为其他格式(可能是ISO格式?),然后在其上使用常规PostgreSQL日期运算符?

您的
createDate
键显然以Unix历元格式保存一个值:自1970-01-01 00:00:00+00起的秒数。PostgreSQL和Java都使用相同的格式(虽然Java在
int64
上使用毫秒精度,而PostgreSQL在
float64
上使用秒),因此您可以轻松地将
json
值转换为带时区的PostgreSQL
时间戳,然后在其上应用默认的日期时间运算符:

SELECT *
FROM mytable
WHERE to_timestamp(myfield->'createDate' * 0.001) BETWEEN '2015-11-1' AND '2015-11-10';

一般来说,PostgreSQL没有任何专门用于
json
值的运算符。如果隐式解释没有用(例如,如果值为all[0-9],则解释为
integer
),则可能在将值转换为特定类型后,您始终必须解压缩
json
文档,然后直接使用值。据我所知,Java(可能还有其他所有语言/框架)也是如此。

您的
createDate
键显然以Unix历元格式保存一个值:自1970-01-01 00:00:00+00以来的秒数。PostgreSQL和Java都使用相同的格式(虽然Java在
int64
上使用毫秒精度,而PostgreSQL在
float64
上使用秒),因此您可以轻松地将
json
值转换为带时区的PostgreSQL
时间戳,然后在其上应用默认的日期时间运算符:

SELECT *
FROM mytable
WHERE to_timestamp(myfield->'createDate' * 0.001) BETWEEN '2015-11-1' AND '2015-11-10';
一般来说,PostgreSQL没有任何专门用于
json
值的运算符。如果隐式解释没有用(例如,如果值为all[0-9],则解释为
integer
),则可能在将值转换为特定类型后,您始终必须解压缩
json
文档,然后直接使用值。就我所知,Java(可能还有其他所有语言/框架)也是如此