मैं 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.