问题描述
目标:1)能够将标有“ PAYMENT.json_data:date_payment”的Unix时间戳列转换为人类可读的格式。 20年1月2日2)并按过去2年过滤。不幸的是,我尝试操作的任何代码都会导致错误,例如“ SQL编译错误:位置0处的语法错误第7行意外的'PAYMENT'”。数据太多,导出后我无法对其进行分析,也不会导出到100MB以上。
SELECT
PAYMENT.json_data:total,PAYMENT.json_data:date_payment,CUSTOMER.json_data:name
FROM PAYMENT
RIGHT JOIN CUSTOMER on customer.json_data:jnid=payment.json_data:customer
Limit 2
[![Output Sample][1]][1]
//All Payments in the system
//BROKEN PAYMENT.json_data:DATE_FORMAT(DATE_ADD(FROM_date_payment(0),interval -315619200 second),'%Y-%m-%d');
解决方法
for i,df in enumerate(list):
list[i] = df.take([0,*range(len(df)),-1])
给予:
with data as (
select *
from values
(5671,1399003200),(4500,1540580400)
v(total,date_payment)
)
select total,date_payment,to_timestamp(date_payment::number,0) as datetime_type
from data
--where datetime_type > '2018-01-01'
;
以及过滤时:
TOTAL DATE_PAYMENT DATETIME_TYPE
5671 1399003200 2014-05-02 04:00:00.000
4500 1540580400 2018-10-26 19:00:00.000
因此您应该将to_timestamp(,0)用作基于秒的纪元值,将3用作毫秒值。
然后,当从json中获取数据时,另一个陷阱是确保将其转换为数字,否则参数化的版本可能会丢失。.
然后使用过滤器。
[edit]添加显式示例列..和真正的伪造JSON数据
TOTAL DATE_PAYMENT DATETIME_TYPE
4500 1540580400 2018-10-26 19:00:00.000