टाइमस्टैम्प दिनांक से 1 दिन घटाना


105

मैं Postgresql के लिए Datagrip का उपयोग कर रहा हूं। मेरे पास टाइमस्टैम्प प्रारूप में दिनांक फ़ील्ड के साथ एक तालिका है (ex: 2016-11-01 00:00:00)। मैं सक्षम होना चाहता हूं:

  1. 1 दिन घटाना करने के लिए एक गणितीय ऑपरेटर लागू करें
  2. आज -१३० दिनों की समय खिड़की के आधार पर इसे फ़िल्टर करें
  3. इसे hh / mm / ss स्टैंप के बिना प्रदर्शित करें (2016-10-31)

वर्तमान प्रारंभिक प्रश्न:

select org_id, count(accounts) as count, ((date_at) - 1) as dateat 
from sourcetable 
where  date_at <= now() - 130
group by org_id, dateat

((date_at)-1)लाइन 1 परिणाम में पर खंड:

[४२ exist exist३] त्रुटि: ऑपरेटर मौजूद नहीं है: समय क्षेत्र के बिना टाइमस्टैम्प - पूर्णांक संकेत: कोई ऑपरेटर दिए गए नाम और तर्क प्रकार से मेल नहीं खाता है। आपको स्पष्ट प्रकार की जातियों को जोड़ने की आवश्यकता हो सकती है। पद: 69

now()खंड एक समान संदेश spawns:

[४२ exist exist३] त्रुटि: ऑपरेटर मौजूद नहीं है: टाइम ज़ोन के साथ टाइमस्टैम्प - पूर्णांक संकेत: कोई ऑपरेटर दिए गए नाम और तर्क प्रकार से मेल नहीं खाता है। आपको स्पष्ट प्रकार की जातियों को जोड़ने की आवश्यकता हो सकती है। पद: ...

ऑनलाइन गाइड टाइप कास्ट्स विलक्षण रूप से अनहेल्दी हैं। इनपुट की सराहना की है।

जवाबों:


239

इसके INTERVALप्रकार का उपयोग करें । उदाहरण के लिए:

--yesterday
SELECT NOW() - INTERVAL '1 DAY';

--Unrelated to the question, but PostgreSQL also supports some shortcuts:
SELECT 'yesterday'::TIMESTAMP, 'tomorrow'::TIMESTAMP, 'allballs'::TIME;

फिर आप अपनी क्वेरी पर निम्नलिखित कर सकते हैं:

SELECT 
    org_id,
    count(accounts) AS COUNT,
    ((date_at) - INTERVAL '1 DAY') AS dateat
FROM 
    sourcetable
WHERE 
    date_at <= now() - INTERVAL '130 DAYS'
GROUP BY 
    org_id,
    dateat;


टिप्स

टिप 1

आप कई ऑपरेंड जोड़ सकते हैं। उदा: चालू माह का अंतिम दिन कैसे प्राप्त करें?

SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';

टिप 2

आप make_intervalफ़ंक्शन का उपयोग करके एक अंतराल भी बना सकते हैं , उपयोगी जब आपको इसे रनटाइम पर बनाने की आवश्यकता होती है (शाब्दिक का उपयोग नहीं करते):

SELECT make_interval(days => 10 + 2);
SELECT make_interval(days => 1, hours => 2);
SELECT make_interval(0, 1, 0, 5, 0, 0, 0.0);


और जानकारी:

दिनांक / समय कार्य और ऑपरेटर

डेटाटाइप-डेटाइम (विशिष्ट मूल्य)


2
जो लोग सोच रहे थे, "ऑलबॉल" आधी रात के लिए एक शाब्दिक है, क्योंकि यह 00:00:00 जैसा दिखता है।
विम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.