टाइमस्टैम्प दिनांक से 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.