मैं PostgreSQL में एक समय श्रृंखला कैसे उत्पन्न करूं?


9

यदि आप दिनांक श्रृंखला बनाना चाहते हैं, तो यह प्रश्न देखें

मान लीजिए कि मैं 24 घंटे के लिए हर 5 मिनट में एक श्रृंखला बनाना चाहता हूं। मैं PostgreSQL में कैसे करूँ?

PostgreSQL generate_series()एक से कर सकता है timestamp, लेकिन नहीं से time

क्या मनमाना टाइमस्टैम्प चुनना बेहतर है, या श्रृंखला तैयार करने का एक और तरीका है?

जवाबों:


14

अनुकूलन करने के लिए:

SELECT x::time
FROM   generate_series(timestamp '2000-01-01 00:00'
                     , timestamp '2000-01-02 00:00'
                     , interval  '5 min') t(x);

तारीख अप्रासंगिक है, इसलिए मनमाना टाइमस्टैम्प स्थिरांक का उपयोग करें। कास्ट timeबहुत सस्ता है।
इसमें निचले और ऊपरी बाउंड शामिल हैं, इसलिए हम '00:00' दो बार मिलते हैं । '2000-01-01 23:59'इसे केवल एक बार प्राप्त करने के लिए ऊपरी बाउंड के रूप में उपयोग करें ।

सम्बंधित:


मुझे लगता है कि मनमानी तारीख के बारे में कुछ बहुत बदसूरत है। लेकिन, मैं सोच रहा था कि यह वास्तव में तेज और बेहतर भी होगा।
इवान कैरोल

चूंकि तारीख अप्रासंगिक है, इसलिए यह मनमाना भी हो सकता है। यह सबसे तेज़ तरीका है।
इरविन ब्रान्डेसटेटर

7

निश्चित नहीं है कि यह सबसे अच्छा तरीका है, लेकिन हम इसका उपयोग generate_seriesमिनी-ऑफसेट उत्पन्न करने के लिए कर सकते हैं 00:00:00और फिर बस make_interval(mins=>)इससे अंतराल प्राप्त करने के लिए कॉल कर सकते हैं।

SELECT make_interval(mins=>x)::time
FROM generate_series(0, 60*24-5, 5) AS t(x);

5

मुझे @EvanCarroll तरीका पसंद आया, लेकिन फिर भी एक और विकल्प -

select  x::time
from    generate_series 
            (current_date,current_date + '1 day - 1 second'::interval,'5 minute') as t(x);

यह कभी-कभी कुछ जगहों पर काम करेगा। यह डीएसटी बोरिंग के अधीन है। अधिक जानकारी के लिए मेरा जवाब यहां देखें।
इवान कैरोल

3

दूसरा रास्ता:

SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.