मैं पोस्टग्रेज के साथ कितने घंटे में अंतराल को परिवर्तित करता हूं?


161

कहो मुझे एक अंतराल है जैसे

4 days 10:00:00

पोस्टग्रैज में। मैं इसे कितने घंटे में बदल सकता हूं (इस मामले में 106?) क्या कोई फ़ंक्शन है या मुझे गोली काटनी चाहिए और ऐसा कुछ करना चाहिए

extract(days, my_interval) * 24 + extract(hours, my_interval)

9
नोट: यदि आपके अंतराल में महीने या साल हैं, तो कोई परिभाषित जवाब नहीं है कि कितने घंटे हैं, क्योंकि महीने या साल में दिनों की संख्या बदलती रहती है। तो उसके लिए बाहर देखो!
टेडी

जवाबों:


314

शायद सबसे आसान तरीका है:

SELECT EXTRACT(epoch FROM my_interval)/3600

6
और अगर इंटरवल में मिनट और / या सेकंड होता है, तो पूर्णांक में फर्श या कास्ट का परिणाम दिया जा सकता है
rasjani

64
युग निकालें? ओह माय, कि एक लाख वर्षों में मेरे दिमाग को पार नहीं किया जाएगा।
अग्नुल

5
SELECT EXTRACT (ep_ FROM my_interval / 3600) (अंतराल में देशी 'डिवाइड पूर्णांक' समर्थन है, परिणाम अंतराल है, और निकालने का परिणाम पूर्णांक है, फ्लोट नहीं है)। इसलिए। ऑटोकैस्ट / फ्लोर किया।
ऑफेंसो

19
चेतावनी: केवल युग निकालने से यह अनुमान लगाया जाता है कि एक महीना = 30 दिन और एक वर्ष = 365.25 दिन।
टेडी

@ टेडी हम इसके साथ क्या कर सकते हैं? इस मुद्दे से कैसे बचें और वास्तविक संख्या में युगान्तर प्राप्त करें?
असमोक्स

18

यदि आप पूर्णांक अर्थात दिनों की संख्या चाहते हैं:

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int

महान! उस के लिए धन्यवाद :) फिर भी, मैंने पाया कि अब हम इसे संशोधित कर सकते हैं SELECT extract('epoch' FROM age('2014-08-02'::timestamp)) / 86400(मैं पीजी 9.4 का उपयोग कर रहा हूं), क्योंकि age(ts)स्वचालित रूप से CURRENT_DATEकेवल एक तर्क का उपयोग करते समय।
1111161171159459134

7
चेतावनी: केवल युग निकालने से यह अनुमान लगाया जाता है कि एक महीना = 30 दिन और एक वर्ष = 365.25 दिन।
टेडी

3

दिनों की संख्या प्राप्त करने का सबसे आसान तरीका होगा:

SELECT EXTRACT(DAY FROM NOW() - '2014-08-02 08:10:56');

जहां तक ​​मुझे पता है कि यह उसी तरह लौटेगा:

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int;

27
यदि आपका अंतराल है '1 month 0 days', तो उपयोग extract(day from …)आपको 0परिणाम के रूप में देगा ।
अंडरआरिक्स

1
select floor((date_part('epoch', order_time - '2016-09-05 00:00:00') / 3600)), count(*)
from od_a_week
group by floor((date_part('epoch', order_time - '2016-09-05 00:00:00') / 3600));

::intरूपांतरण गोलाई के सिद्धांत इस प्रकार है। यदि आप एक अलग परिणाम चाहते हैं जैसे कि नीचे गोलाई, तो आप इसी तरह के गणित फ़ंक्शन का उपयोग कर सकते हैं floor


1

यदि आप तालिका फ़ील्ड में परिवर्तित करते हैं:

  1. फ़ील्ड को परिभाषित करें ताकि इसमें सेकंड हों:

     CREATE TABLE IF NOT EXISTS test (
         ...
         field        INTERVAL SECOND(0)
     );
  2. मान निकालें। अंतर के बड़े होने के बाद अन्य बुद्धिमानों को कास्ट करने के लिए याद रखें एक बार आपको एक अप्रिय आश्चर्य हो सकता है:

    EXTRACT(EPOCH FROM field)::int


मुझे नहीं लगता कि Redshift INTERVAL डेटाटाइप का समर्थन करता है। यह सिर्फ बड़ा होगा।
मटका

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.