लक्ष्य: 1) "PAYMENT.json_data:date_payment" लेबल वाले यूनिक्स टाइमस्टैम्प कॉलम को मानव पठनीय प्रारूप में बदलने की क्षमता उदा. 01/02/20 2) और पिछले 2 वर्षों से फ़िल्टर करें। दुर्भाग्य से किसी भी कोड को मैं "एसक्यूएल संकलन त्रुटि: सिंटैक्स त्रुटि लाइन 7 स्थिति 0 अप्रत्याशित 'भुगतान'" जैसी त्रुटियों में परिणाम देने की कोशिश करता हूं। इतना डेटा है कि मैं निर्यात के बाद इसका विश्लेषण नहीं कर सकता और न ही यह 100 एमबी से अधिक निर्यात करेगा।


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');

enter image description here

1
sarahscrystalz 9 सितंबर 2020, 03:03

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

और छानते समय:

TOTAL   DATE_PAYMENT    DATETIME_TYPE
4500    1540580400  2018-10-26 19:00:00.000

इसलिए आपको दूसरे आधारित युग मानों के लिए to_timestamp(, 0) और मिलीसेकंड मानों के लिए 3 का उपयोग करना चाहिए।

फिर दूसरा गोचा, जब जेसन से डेटा प्राप्त करना, यह सुनिश्चित करना है कि आपने इसे नंबर पर डाला है, अन्यथा पैरामीटरयुक्त संस्करण खो सकता है ..

फिर फ़िल्टर का उपयोग करें।

[संपादित करें] स्पष्ट उदाहरण कॉलम जोड़ें .. और वास्तविक नकली JSON डेटा

WITH payment AS (  
  SELECT parse_json(a) as json_data
  FROM VALUES 
    ('{"customer":1234, "total":5671, "date_payment": 1399003200 }' ),
    ('{"customer":"1234", "total":4500, "date_payment": "1540580400"}' ) 
    v(a)
), customer as (  
SELECT parse_json(b) as json_data
  FROM VALUES
    ('{"jnid":"1234", "name": "Company AAA"}'),
    ('{"jnid":1234, "name": "Company AAA"}')
    c(b)
)
SELECT
    p.json_data:total::number AS total
    ,p.json_data:date_payment::number AS date_payment
    ,c.json_data:name AS customer_name
    --,to_timestamp(p.json_data:date_payment::number, 0) as datetime_type 
FROM PAYMENT AS p
JOIN CUSTOMER AS c
  ON c.json_data:jnid = p.json_data:customer  
WHERE to_timestamp(p.json_data:date_payment::number, 0) >= '2018-07-21'
ORDER BY 3,2;
1
Simeon Pilgrim 10 सितंबर 2020, 00:56