Database

Menambah atau Mengurangi Tanggal Pada MSAccess

Menambah atau Mengurangi Tanggal Pada MS Access

Microsoft Access adalah sistem manajemen database relasional yang sangat populer digunakan di lingkungan bisnis dan perkantoran. Salah satu operasi yang paling sering dilakukan dalam pengelolaan database adalah manipulasi tanggal, seperti menambah atau mengurangi hari, bulan, tahun, dan satuan waktu lainnya. Dalam artikel ini, kita akan membahas secara lengkap berbagai fungsi tanggal yang tersedia di MS Access beserta contoh-contoh penggunaannya.

Fungsi DateAdd

Fungsi DateAdd adalah fungsi utama di MS Access untuk menambah atau mengurangi satuan waktu tertentu dari sebuah tanggal. Fungsi ini sangat fleksibel dan dapat digunakan untuk berbagai keperluan manipulasi tanggal.

Sintaks

DateAdd(interval, number, date)

Parameter-parameter fungsi DateAdd:

  • interval: Satuan waktu yang akan ditambahkan atau dikurangi. Nilai yang tersedia meliputi:
    • "d" atau "y" - Hari (day)
    • "w" - Weekday
    • "ww" - Minggu (week)
    • "m" - Bulan (month)
    • "q" - Kuartal (quarter)
    • "yyyy" - Tahun (year)
    • "h" - Jam (hour)
    • "n" - Menit (minute)
    • "s" - Detik (second)
  • number: Jumlah satuan waktu yang akan ditambahkan (positif) atau dikurangi (negatif).
  • date: Tanggal awal yang akan dimanipulasi. Bisa berupa field tanggal, nilai tanggal literal, atau ekspresi yang menghasilkan tanggal.

Contoh Penggunaan DateAdd

Menambah Hari

-- Menambah 7 hari dari tanggal saat ini
SELECT DateAdd("d", 7, Date()) AS TanggalMendatang;

-- Menambah 30 hari dari field tanggal
SELECT OrderDate, DateAdd("d", 30, OrderDate) AS DueDate
FROM Orders;

-- Menambah 14 hari dari tanggal tertentu
SELECT DateAdd("d", 14, #01/15/2024#) AS Hasil;

Mengurangi Hari

-- Mengurangi 7 hari dari tanggal saat ini
SELECT DateAdd("d", -7, Date()) AS TanggalSemingguLalu;

-- Mengurangi 30 hari dari field tanggal
SELECT InvoiceDate, DateAdd("d", -30, InvoiceDate) AS ReminderDate
FROM Invoices;

-- Mengurangi 3 bulan dari tanggal saat ini
SELECT DateAdd("m", -3, Date()) AS TigaBulanLalu;

Menambah atau Mengurangi Bulan

-- Menambah 3 bulan dari tanggal saat ini
SELECT DateAdd("m", 3, Date()) AS TigaBulanDepan;

-- Mengurangi 6 bulan dari field tanggal
SELECT ContractDate, DateAdd("m", -6, ContractDate) AS ReviewDate
FROM Contracts;

-- Menambah 1 bulan
SELECT DateAdd("m", 1, #12/31/2024#) AS Hasil;
-- Hasil: 1/31/2025

Menambah atau Mengurangi Tahun

-- Menambah 1 tahun dari tanggal saat ini
SELECT DateAdd("yyyy", 1, Date()) AS SetahunDepan;

-- Mengurangi 5 tahun dari field tanggal
SELECT BirthDate, DateAdd("yyyy", -5, BirthDate) AS FiveYearsAgo
FROM Employees;

-- Menambah 2 tahun
SELECT DateAdd("yyyy", 2, #06/15/2024#) AS Hasil;
-- Hasil: 6/15/2026

Menambah Jam, Menit, dan Detik

-- Menambah 2 jam dari waktu saat ini
SELECT DateAdd("h", 2, Now()) AS DuaJamLagi;

-- Menambah 30 menit
SELECT DateAdd("n", 30, Now()) AS TigaPuluhMenitLagi;

-- Mengurangi 15 menit
SELECT DateAdd("n", -15, Now()) AS LimaBelasMenitLalu;

-- Menambah 45 detik
SELECT DateAdd("s", 45, Now()) AS EmpatLimaDetikLagi;

Fungsi DateDiff

Fungsi DateDiff digunakan untuk menghitung selisih antara dua tanggal dalam satuan waktu tertentu. Fungsi ini sangat berguna untuk menghitung umur, durasi, tenggat waktu, dan berbagai perhitungan tanggal lainnya.

Sintaks

DateDiff(interval, date1, date2, [firstdayofweek], [firstweekofyear])

Parameter-parameter fungsi DateDiff:

  • interval: Satuan waktu yang digunakan untuk menghitung selisih (sama dengan DateAdd).
  • date1: Tanggal pertama (tanggal awal).
  • date2: Tanggal kedua (tanggal akhir).
  • firstdayofweek: (Opsional) Menentukan hari pertama dalam minggu.
  • firstweekofyear: (Opsional) Menentukan minggu pertama dalam tahun.

Contoh Penggunaan DateDiff

Menghitung Selisih Hari

-- Selisih hari antara dua tanggal
SELECT DateDiff("d", #01/01/2024#, #12/31/2024#) AS SelisihHari;
-- Hasil: 365 (atau 366 untuk tahun kabisat)

-- Selisih hari dari tanggal tertentu sampai hari ini
SELECT DateDiff("d", OrderDate, Date()) AS DaysElapsed
FROM Orders;

-- Menghitung umur dalam hari
SELECT EmployeeName, DateDiff("d", BirthDate, Date()) AS AgeInDays
FROM Employees;

Menghitung Selisih Bulan dan Tahun

-- Selisih bulan antara dua tanggal
SELECT DateDiff("m", HireDate, Date()) AS MonthsEmployed
FROM Employees;

-- Selisih tahun (menghitung umur)
SELECT EmployeeName, DateDiff("yyyy", BirthDate, Date()) AS Age
FROM Employees;

-- Selisih kuartal
SELECT DateDiff("q", StartDate, EndDate) AS QuartersDiff
FROM Projects;

Menghitung Selisih Jam dan Menit

-- Selisih jam antara dua waktu
SELECT DateDiff("h", StartTime, EndTime) AS HoursDiff
FROM TimeEntries;

-- Selisih menit
SELECT DateDiff("n", CheckIn, CheckOut) AS MinutesWorked
FROM Attendance;

Fungsi Tanggal Lainnya di MS Access

DatePart

Fungsi DatePart digunakan untuk mengekstrak bagian tertentu dari sebuah tanggal:

-- Mendapatkan hari dari tanggal
SELECT DatePart("d", Date()) AS HariIni;

-- Mendapatkan bulan dari tanggal
SELECT DatePart("m", OrderDate) AS BulanPemesanan
FROM Orders;

-- Mendapatkan tahun dari tanggal
SELECT DatePart("yyyy", BirthDate) AS TahunLahir
FROM Employees;

-- Mendapatkan hari dalam seminggu (1=Minggu, 7=Sabtu)
SELECT DatePart("w", Date()) AS HariDalamMinggu;

-- Mendapatkan minggu dalam setahun
SELECT DatePart("ww", Date()) AS MingguDalamTahun;

Format Tanggal

Fungsi Format digunakan untuk memformat tanggal sesuai keinginan:

-- Format tanggal Indonesia
SELECT Format(Date(), "dd/mm/yyyy") AS TanggalFormatted;

-- Format dengan nama bulan
SELECT Format(Date(), "dd mmmm yyyy") AS TanggalLengkap;
-- Hasil: 02 Juni 2026

-- Format custom
SELECT Format(OrderDate, "ddd, dd-mmm-yyyy") AS TanggalPesan
FROM Orders;
-- Hasil: Sen, 15-Jan-2024

-- Format waktu
SELECT Format(Now(), "hh:nn:ss") AS WaktuSekarang;

Fungsi DateSerial

Fungsi DateSerial membuat tanggal dari komponen tahun, bulan, dan hari terpisah:

-- Membuat tanggal dari komponen terpisah
SELECT DateSerial(2024, 6, 15) AS TanggalBaru;
-- Hasil: 6/15/2024

-- Menggunakan dengan field
SELECT DateSerial(Year(Date()), 12, 31) AS AkhirTahun;

-- Membuat tanggal akhir bulan
SELECT DateSerial(2024, 13, 0) AS AkhirBulanDesember;
-- Hasil: 12/31/2024 (hari 0 dari bulan berikutnya = hari terakhir bulan sebelumnya)

Contoh Praktis dalam Query

1. Menghitung Tenggat Waktu

SELECT OrderID, OrderDate,
       DateAdd("d", 30, OrderDate) AS DueDate,
       IIf(DateAdd("d", 30, OrderDate) < Date(), "Terlambat", "Aktif") AS Status
FROM Orders;

2. Filter Data Berdasarkan Rentang Tanggal

-- Data 30 hari terakhir
SELECT * FROM Orders
WHERE OrderDate >= DateAdd("d", -30, Date());

-- Data bulan lalu
SELECT * FROM Orders
WHERE OrderDate >= DateAdd("m", -1, DateSerial(Year(Date()), Month(Date()), 1))
  AND OrderDate < DateSerial(Year(Date()), Month(Date()), 1);

-- Data tahun ini
SELECT * FROM Orders
WHERE Year(OrderDate) = Year(Date());

3. Menghitung Usia

SELECT EmployeeName, BirthDate,
       DateDiff("yyyy", BirthDate, Date()) AS Usia,
       DateAdd("yyyy", DateDiff("yyyy", BirthDate, Date()), BirthDate) AS UlangTahunBerikutnya
FROM Employees;

4. Menghitung Hari Kerja

-- Menghitung hari kerja antara dua tanggal (tanpa weekend)
SELECT OrderID, OrderDate, ShipDate,
       DateDiff("d", OrderDate, ShipDate) - 
       (DateDiff("ww", OrderDate, ShipDate) * 2) AS WorkingDays
FROM Orders;

5. Membuat Laporan Bulanan

SELECT Format(OrderDate, "yyyy-mm") AS Bulan,
       Count(*) AS JumlahOrder,
       Sum(TotalAmount) AS TotalPenjualan
FROM Orders
WHERE OrderDate >= DateAdd("yyyy", -1, Date())
GROUP BY Format(OrderDate, "yyyy-mm")
ORDER BY Format(OrderDate, "yyyy-mm");

6. Menghitung Jatuh Tempo

SELECT InvoiceID, InvoiceDate, Amount,
       DateAdd("d", 30, InvoiceDate) AS DueDate,
       DateDiff("d", DateAdd("d", 30, InvoiceDate), Date()) AS DaysOverdue,
       IIf(DateDiff("d", DateAdd("d", 30, InvoiceDate), Date()) > 0,
           "Overdue by " & DateDiff("d", DateAdd("d", 30, InvoiceDate), Date()) & " days",
           "Not yet due") AS Status
FROM Invoices;

Tips dan Trik

  • Format tanggal konsisten: Selalu gunakan format tanggal yang konsisten (#mm/dd/yyyy#) dalam query untuk menghindari kesalahan interpretasi.
  • Null handling: Gunakan fungsi Nz() untuk menangani nilai Null pada field tanggal: DateAdd("d", 30, Nz(OrderDate, Date()))
  • Kinerja query: Hindari penggunaan fungsi tanggal pada field di sisi kiri WHERE clause karena dapat memperlambat query. Lebih baik gunakan indeks pada field tanggal.
  • Timezone: Perhatikan bahwa MS Access menggunakan timezone lokal komputer. Pastikan konsistensi jika database diakses dari berbagai lokasi.
  • Tanggal kosong: Gunakan fungsi IsNull() atau IsDate() untuk memeriksa apakah field tanggal berisi nilai yang valid sebelum melakukan operasi tanggal.

Kesimpulan

MS Access menyediakan berbagai fungsi tanggal yang sangat lengkap dan powerful untuk memanipulasi data tanggal. Fungsi DateAdd dan DateDiff adalah dua fungsi utama yang paling sering digunakan untuk menambah, mengurangi, dan menghitung selisih tanggal. Dengan memahami dan menguasai fungsi-fungsi ini beserta berbagai contoh penggunaannya, Anda dapat dengan mudah menyelesaikan berbagai keperluan pengelolaan data tanggal dalam database MS Access. Kombinasikan dengan fungsi Format dan DateSerial untuk hasil yang lebih fleksibel dan sesuai kebutuhan.


You may also like


0 Comments


Leave a Reply

Scroll to Top