PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एसक्यूएल/पोस्टग्रेज डेटाटाइम डिवीजन/सामान्यीकरण

आवश्यक पंक्तियाँ प्राप्त करने के लिए, सेटिंग फंक्शन सेट करें साथ में . वहां से, CASE . का उपयोग करें कथन और तिथि अंकगणित प्रासंगिक मूल्यों को बाहर निकालने के लिए।

शुरू करने के लिए यहां एक उदाहरण दिया गया है:

with data as (
  select id, start_date, end_date
  from (values
    (1, '2014-12-02 14:12:00+00'::timestamptz, '2014-12-03 06:45:00+00'::timestamptz),
    (2, '2014-12-05 15:25:00+00'::timestamptz, '2014-12-05 07:29:00+00'::timestamptz)
  ) as rows (id, start_date, end_date)
)
select data.id,
      case days.d = date_trunc('day', data.start_date)
        when true then data.start_date
        else days.d
      end as start_date,
      case days.d = date_trunc('day', data.end_date)
        when true then data.end_date
        else days.d + interval '1 day' - interval '1 sec'
      end as end_date
from data
join generate_series(
      date_trunc('day', data.start_date),
      date_trunc('day', data.end_date),
      '1 day'
      ) as days (d)
      on days.d >= date_trunc('day', data.start_date)
      and days.d <= date_trunc('day', data.end_date)

 id |       start_date       |        end_date        
----+------------------------+------------------------
  1 | 2014-12-02 15:12:00+01 | 2014-12-02 23:59:59+01
  1 | 2014-12-03 00:00:00+01 | 2014-12-03 07:45:00+01
  2 | 2014-12-05 16:25:00+01 | 2014-12-05 08:29:00+01
(3 rows)

एक तरफ, आप जो कर रहे हैं उसके आधार पर, आपके लिए तारीख सीमा :

with data as (
  select id, start_date, end_date
  from (values
    (1, '2014-12-02 14:12:00+00'::timestamptz, '2014-12-03 06:45:00+00'::timestamptz),
    (2, '2014-12-05 07:25:00+00'::timestamptz, '2014-12-05 15:29:00+00'::timestamptz)
  ) as rows (id, start_date, end_date)
)
select data.id,
      tstzrange(data.start_date, data.end_date)
from data;

 id |                      tstzrange                      
----+-----------------------------------------------------
  1 | ["2014-12-02 15:12:00+01","2014-12-03 07:45:00+01")
  2 | ["2014-12-05 08:25:00+01","2014-12-05 16:29:00+01")
(2 rows)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में किसी तालिका के स्कीमा विवरण को क्वेरी करें?

  2. गैर-अतिव्यापी समय सीमाओं वाली प्रविष्टियां कैसे सुनिश्चित करें?

  3. यूपीएसईआरटी परीक्षण कोड में सिंटेक्स त्रुटि

  4. मैं PostgreSQL में एक वाक्य में अंतिम दो शब्दों का मिलान कैसे कर सकता हूं?

  5. क्या सरणी jOOQ और PostgreSQL में अनुकूलित हैं?