PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menentukan resolusi terbesar dari INTERVAL?

Pertanyaannya tidak 100% jelas sehingga jawabannya mungkin atau mungkin tidak persis seperti yang Anda cari, tapi...

Ada justify_interval() fungsi, yang mungkin ingin Anda lihat.

test=# select justify_interval(INTERVAL '100 days 3 seconds');
    justify_interval     
-------------------------
 3 mons 10 days 00:00:03
(1 row)

test=# select justify_interval(TIME '20:05' - TIME '12:01:01');
 justify_interval 
------------------
 08:03:59
(1 row)

test=# select justify_interval(AGE(NOW(), NOW() - INTERVAL '1 MONTH'));
 justify_interval 
------------------
 1 mon
(1 row)

Untuk itu ekstrak tahun, lalu bulan, lalu hari, dll. sampai Anda menemukan jawaban bukan nol:

test=# select extract('mon' from interval '3 mons 10 days 00:00:03');
 date_part 
-----------
         3

Jawab pertanyaan Anda yang lain di komentar:

create function max_res(interval) returns interval as $$
select case
       when extract('year' from justify_interval($1)) > 0 or
            extract('mon' from justify_interval($1)) > 0 or
            extract('day' from justify_interval($1)) > 0
       then '1 day'
       when extract('hour' from justify_interval($1)) > 0
       then '1 hour'
       when ...
       end;
$$ language sql immutable strict;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Histogram di PostgreSQL

  2. Masalah dengan server Rails

  3. Bagaimana menemukan di mana fungsi sedang digunakan

  4. Heroku Rails 4 tidak dapat terhubung ke server:koneksi ditolak

  5. Postgres db design Normalisasi tabel atau Gunakan Kolom Array