পোস্টগ্র্রেএসকিউএল-এ আমি কীভাবে একটি সময় সিরিজ তৈরি করব?


9

আপনি যদি একটি তারিখের সিরিজ তৈরি করতে চাইছেন তবে এই প্রশ্নটি দেখুন

ধরা যাক আমি 24 ঘন্টা ধরে প্রতি 5 মিনিটের জন্য একটি সিরিজ তৈরি করতে চাই। পোস্টগ্রিএসকিউএল এ আমি কীভাবে করব?

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);

তারিখটি অপ্রাসঙ্গিক, তাই স্বেচ্ছাচারিতা টাইমস্ট্যাম্প ধ্রুবক ব্যবহার করুন। Castালাই 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

আমি @ ইভানক্রোল উপায় পছন্দ করেছি তবে অন্য একটি বিকল্প -

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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.