Di Postgres, age()
fungsi mengembalikan usia berdasarkan dua stempel waktu atau variabel tanggal.
Hasilnya dikembalikan menggunakan tahun dan bulan, bukan hanya hari.
Misalnya, hasilnya mungkin terlihat seperti ini:3 tahun 2 mons 30 hari .
Sintaks
Anda dapat menggunakan salah satu dari dua sintaks berikut:
age(timestamp)
age(timestamp, timestamp)
Yang pertama mengembalikan usia berdasarkan tanggal saat ini. Secara khusus, ini mengurangi current_date()
(di tengah malam).
Sintaks kedua memungkinkan Anda untuk mendapatkan tanggal berdasarkan dua tanggal eksplisit. Menggunakan sintaks ini menyebabkan tanggal kedua dikurangi dari yang pertama. Dengan kata lain, usia tidak didasarkan pada tanggal hari ini – ini didasarkan pada tanggal yang diberikan dalam argumen pertama.
Contoh 1 – Gunakan Tanggal Hari Ini
Berikut adalah contoh untuk mendemonstrasikan sintaks pertama.
SELECT age(timestamp '1987-03-14');
Hasil:
33 years 2 mons 30 days
Dalam hal ini, saya memberikan satu argumen. age()
fungsi kemudian dikurangi dari tanggal hari ini (tanggal saya menjalankan kueri) dan kami mendapatkan hasilnya.
Hanya untuk mendemonstrasikan ini lebih lanjut, ini dia lagi, tapi kali ini bersama current_date()
untuk menunjukkan tanggal saya menjalankan kueri.
SELECT
current_date,
age(timestamp '1987-03-14');
Hasil:
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
Contoh 2 – Gunakan Tanggal Khusus
Dalam contoh ini, saya memberikan dua tanggal untuk membandingkan. Oleh karena itu, usia tidak didasarkan pada tanggal hari ini. Ini didasarkan pada kencan pertama yang diberikan kepada age()
fungsi.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
Hasil:
9 mons 18 days
Dalam hal ini, usianya kurang dari satu tahun sehingga tahun tidak disebutkan dalam hasil.
Berikut adalah contoh lain yang menunjukkan apa yang terjadi jika hanya tahun yang berubah (yaitu bagian bulan dan hari dari kedua tanggal tersebut sama persis, tetapi tahunnya berbeda).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
Hasil:
7 years
Jadi sekali lagi, itu hanya menghilangkan bagian-bagian yang tidak relevan (dalam hal ini bulan dan hari).
Contoh 3 – Tanggal Identik
Inilah yang terjadi jika kedua tanggal itu sama.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
Hasil:
00:00:00
Contoh 4 – Usia Negatif
Jika kencan kedua lebih lambat dari kencan pertama, Anda berakhir dengan usia negatif.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
Hasil:
-1 years -2 mons -6 days
Di sini tanda minus ditambahkan ke semua komponen tanggal (yaitu komponen tahun, bulan, dan hari).
Contoh 5 – Usia dalam Tahun
Jika Anda hanya ingin usia dalam tahun, Anda dapat menggunakan extract()
atau date_part()
untuk mengekstrak tahun dari age()
nilai kembalian fungsi.
Berikut adalah contoh yang menggunakan extract()
fungsi:
SELECT extract(year from age(timestamp '1997-10-25'));
Hasil:
22.0
Begitulah tampilannya saat saya menjalankannya di Azure Data Studio.
Saat saya menjalankannya di psql , saya mengerti ini:
22
Keduanya extract()
dan date_part()
mengembalikan hasilnya menggunakan tipe data presisi ganda.
Anda dapat mengonversinya menjadi bilangan bulat (atau tipe data lainnya) jika diperlukan, dengan menambahkannya dengan ::int
.
SELECT extract(year from age(timestamp '1997-10-25'))::int;
Hasil:
22