Aritmetika Tanggal dan Interval
Menambahkan atau mengurangkan periode serta menghitung selisih antar tanggal.
Aritmetika Tanggal dan Interval adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Mengapa Perhitungan Tanggal Muncul dalam Wawancara
Aritmetika tanggal adalah salah satu keterampilan SQL yang paling praktis, sehingga pewawancara sering menggunakannya untuk peran analis dan pengembang sisi server. Hampir setiap pertanyaan bisnis memiliki komponen waktu: 30 hari terakhir, pesanan per minggu, atau hari sejak pendaftaran.
Tantangannya adalah fungsi tanggal merupakan bagian SQL yang paling tidak terstandar. Operasi yang sama memiliki sintaks berbeda di PostgreSQL, MySQL, dan SQL Server. Kandidat yang kuat menyatakan konsepnya dengan jelas, lalu menyesuaikan sintaks dengan dialeknya.
- Menambahkan atau mengurangkan suatu periode
- Menghitung perbedaan antara dua tanggal
- Bekerja dengan nilai
INTERVAL
Tipe INTERVAL
Dalam PostgreSQL dan standar SQL, suatu jangka waktu merupakan nilai kelas utama yang disebut interval. Anda menambahkannya ke tanggal atau cap waktu dengan operator + dan - biasa.
Ini adalah cara paling jelas untuk menyatakan "30 hari yang lalu" atau "3 bulan dari sekarang", dan pewawancara menyukainya karena cara bacanya seperti bahasa Inggris.
SELECT
CURRENT_DATE,
CURRENT_DATE + INTERVAL '7 days' AS next_week,
CURRENT_DATE - INTERVAL '1 month' AS last_month,
NOW() + INTERVAL '90 minutes' AS soon;Menambahkan Periode di Berbagai Dialek
Pewawancara sering bertanya: "bagaimana Anda menambahkan 7 hari di MySQL dibandingkan dengan SQL Server?" Mengetahui tiga dialek utama menunjukkan pengalaman nyata.
- PostgreSQL:
d + INTERVAL '7 days' - MySQL:
DATE_ADD(d, INTERVAL 7 DAY) - SQL Server:
DATEADD(day, 7, d)
Konsepnya sama; hanya penulisannya yang berubah. Selalu sebutkan dialek yang Anda gunakan.
-- MySQL
SELECT DATE_ADD(order_date, INTERVAL 7 DAY) AS due_date FROM orders;
-- SQL Server
SELECT DATEADD(day, 7, order_date) AS due_date FROM orders;Perbedaan antara Dua Tanggal
Bagian lain dari aritmetika tanggal adalah menghitung jarak antara dua tanggal. Hasilnya bergantung pada satuan dan dialeknya.
Di PostgreSQL, mengurangkan dua nilai date menghasilkan bilangan bulat yang langsung menyatakan jumlah hari. Mengurangkan dua nilai timestamp menghasilkan interval.
-- Postgres: date - date returns an integer (days)
SELECT shipped_date - order_date AS days_to_ship
FROM orders;DATEDIFF dan Jebakannya
DATEDIFF tersedia di MySQL dan SQL Server, tetapi perilakunya berbeda; ini merupakan jebakan wawancara yang populer.
- MySQL:
DATEDIFF(end, start)hanya mengembalikan jumlah hari penuh. - SQL Server:
DATEDIFF(unit, start, end)menerima satuan dan menghitung perlintasan batas, bukan satuan penuh yang telah berlalu.
Perilaku berdasarkan batas ini penting: DATEDIFF(year, '2023-12-31', '2024-01-01') di SQL Server mengembalikan 1, meskipun baru satu hari yang berlalu.
-- SQL Server: counts boundaries, not elapsed time
SELECT DATEDIFF(year, '2023-12-31', '2024-01-01'); -- 1
SELECT DATEDIFF(day, '2023-12-31', '2024-01-01'); -- 1Usia dalam Tahun dengan Cara yang Tepat
"Hitung usia pelanggan dalam tahun" adalah pertanyaan klasik. Menggunakan selisih hari yang dibagi 365 secara naif akan meleset karena adanya tahun kabisat. PostgreSQL memiliki AGE() yang mengembalikan interval kalender sebenarnya.
Untuk memperoleh jumlah tahun bulat dengan benar, ambil bagian tahun dari usia tersebut.
-- Postgres
SELECT
birth_date,
AGE(CURRENT_DATE, birth_date) AS exact_age,
EXTRACT(YEAR FROM AGE(CURRENT_DATE, birth_date)) AS age_years
FROM customers;Contoh Kerja: Pesanan dalam 30 Hari Terakhir
Ini adalah penyaringan yang hampir selalu muncul dalam wawancara. Cara yang tepat adalah membandingkan kolom tanggal dengan batas waktu yang dihitung, bukan membungkus kolom dalam suatu fungsi.
Membandingkan order_date dengan batas waktu konstan membuat indeks apa pun pada order_date tetap dapat digunakan. Kita akan kembali ke poin tentang indeks ini nanti.
SELECT COUNT(*) AS recent_orders
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '30 days';Rentang Setengah Terbuka untuk Bulan Kalender
Saat diminta "semua pesanan pada Maret 2024", hindari BETWEEN '2024-03-01' AND '2024-03-31' pada kolom cap waktu. Cara itu melewatkan baris pada pukul 23.00 tanggal 31 Maret dan rawan kesalahan satu nilai.
Pola yang kuat adalah interval setengah terbuka: >= awal dan < awal bulan berikutnya. Pola ini berfungsi untuk ketelitian kolom apa pun.
SELECT *
FROM orders
WHERE order_ts >= DATE '2024-03-01'
AND order_ts < DATE '2024-04-01';EXTRACT dan Bagian Tanggal
Mengambil satu komponen dari tanggal merupakan pekerjaan rutin dalam pelaporan. Fungsi standarnya adalah EXTRACT(part FROM d), yang didukung oleh PostgreSQL dan MySQL.
EXTRACT(YEAR FROM d),MONTH,DAYEXTRACT(DOW FROM d)untuk hari dalam minggu- SQL Server menggunakan
DATEPART(weekday, d)sebagai gantinya
Catatan: mengekstrak MONTH saja akan mengelompokkan bulan Maret dari tahun yang berbeda menjadi satu, yang jarang sesuai dengan kebutuhan.
SELECT
EXTRACT(YEAR FROM order_ts) AS yr,
EXTRACT(MONTH FROM order_ts) AS mo,
COUNT(*) AS n
FROM orders
GROUP BY 1, 2
ORDER BY 1, 2;Contoh Lebih Mendalam: Hari hingga Ulang Tahun Berikutnya
Ini adalah teka-teki aritmetika yang lebih sulit karena menggabungkan pengambilan bagian dan penambahan. Tentukan ulang tahun pada tahun ini dari bulan dan hari lahir, lalu jika tanggalnya sudah lewat, pindahkan ke tahun berikutnya.
Menjelaskan langkah-langkah ini secara lisan menunjukkan kepada pewawancara bahwa Anda dapat mempertimbangkan kasus khusus, seperti ulang tahun yang sudah terjadi pada tahun ini.
-- Postgres
SELECT
name,
CASE
WHEN MAKE_DATE(EXTRACT(YEAR FROM CURRENT_DATE)::int,
EXTRACT(MONTH FROM birth_date)::int,
EXTRACT(DAY FROM birth_date)::int) >= CURRENT_DATE
THEN MAKE_DATE(EXTRACT(YEAR FROM CURRENT_DATE)::int,
EXTRACT(MONTH FROM birth_date)::int,
EXTRACT(DAY FROM birth_date)::int) - CURRENT_DATE
ELSE MAKE_DATE(EXTRACT(YEAR FROM CURRENT_DATE)::int + 1,
EXTRACT(MONTH FROM birth_date)::int,
EXTRACT(DAY FROM birth_date)::int) - CURRENT_DATE
END AS days_until
FROM customers;Hari Pertama dan Terakhir Bulan
"Berikan hari terakhir dari bulan setiap pesanan" menguji apakah Anda menggunakan fungsi bawaan atau membuatnya dari awal. PostgreSQL menggabungkan DATE_TRUNC dengan aritmetika interval; MySQL memiliki LAST_DAY() secara langsung.
Trik untuk mendapatkan hari terakhir di PostgreSQL: potong tanggal ke awal bulan, tambahkan satu bulan, lalu kurangi satu hari.
-- Postgres
SELECT
DATE_TRUNC('month', order_ts) AS month_start,
DATE_TRUNC('month', order_ts) + INTERVAL '1 month - 1 day' AS month_end
FROM orders;
-- MySQL: LAST_DAY(order_ts)Pemeriksaan Singkat
Uji pemahaman Anda tentang perilaku perbedaan tanggal di berbagai dialek.
Ringkasan: Aritmetika Tanggal dan Interval
Hal-hal penting untuk wawancara:
- Gunakan nilai
INTERVALdengan+/-di PostgreSQL;DATE_ADD/DATEDIFFdi MySQL;DATEADD/DATEDIFFdi SQL Server. - DATEDIFF SQL Server menghitung perlintasan batas, bukan satuan waktu yang berlalu; inilah jebakan utama.
- Untuk usia dalam tahun, ambil bagian tahun dari
AGE(), bukan dengan membagi jumlah hari dengan 365. - Saring baris terbaru dengan membandingkan kolom terhadap batas waktu yang dihitung, dan gunakan rentang setengah terbuka (
>= start AND < next) untuk rentang bulan.
Nyatakan konsepnya terlebih dahulu, lalu sesuaikan dengan dialeknya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Aritmetika Tanggal dan Interval” gratis?
Ya — teks lengkap “Aritmetika Tanggal dan Interval” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Aritmetika Tanggal dan Interval”?
Menambahkan atau mengurangkan periode serta menghitung selisih antar tanggal. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?
Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Aritmetika Tanggal dan Interval” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?
Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Aritmetika Tanggal dan Interval
- Memotong dan Mengelompokkan Tanggal
- Mengurai dan Memformat String
- Zona Waktu dan Stempel Waktu