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(可能还有其他所有语言/框架)也是如此