Artikel ini berfokus pada pengembangan pemahaman dasar tentang cara menggunakan salah satu fungsi tanggal Transact-SQL yang paling umum:DATEADD, DATEDIFF, dan DATEPART.
Dalam artikel ini, saya juga menekankan pentingnya menggunakan fungsi tanggal ini dengan benar dalam manipulasi tanggal harian diikuti oleh beberapa skenario menarik di mana fungsi tanggal ini dapat digunakan secara kolaboratif untuk menyelesaikan perhitungan tanggal yang sedikit rumit.
Karena fungsi-fungsi ini terutama digunakan dalam manipulasi tanggal, pertama-tama mari kita coba memahami apa yang kita maksud dengan manipulasi tanggal.
Memahami Manipulasi Tanggal
Nilai tanggal-waktu sering kali perlu dimodifikasi sesuai kebutuhan, dan metode memodifikasi atau menangani atau mengendalikan perhitungan tanggal-waktu dikenal sebagai manipulasi tanggal.
Kami juga mengacu pada situasi ini (manipulasi tanggal) ketika nilai tanggal dibaca dari database dan kemudian dimodifikasi sebelum disimpan lagi.
Skenario Pesanan Pelanggan
Contoh manipulasi tanggal yang menarik adalah pesanan pelanggan skenario, ketika pesanan ditempatkan oleh pelanggan diproses, tanggal pengiriman harus ditetapkan 5 hari sebelum tanggal pemesanan , jadi ini berarti bahwa pengembang harus menggunakan fungsi tanggal T-SQL untuk memanipulasi (memodifikasi) tanggal pemesanan untuk menghitung tanggal pengiriman .
Contoh Laporan Penjualan Harian
Contoh yang agak rumit adalah ketika pengguna bisnis menjalankan Laporan Penjualan Harian jika itu menunjukkan hasil kemarin.
Misalnya, jika kita menjalankan Laporan Penjualan Harian pada hari minggu jam 11.00 akan menampilkan hasil berdasarkan hari sabtu, dan jika kita menjalankannya pada hari sabtu jam 17.00 maka akan tampil semua hasil pada hari jumat, karena hari ini belum berakhir dan yang terbaru hari lengkap yang tersedia adalah kemarin. Beginilah cara sebagian besar laporan harian profesional termasuk laporan keuangan dirancang untuk dijalankan.
Dalam contoh ini, tanggal saat ini dimanipulasi (dimodifikasi) untuk mendapatkan tanggal sebelumnya, yang berisi catatan penjualan selama satu hari penuh.
Menerapkan Contoh
Harap ingat contoh di atas karena kami akan menerapkan skenario ini setelah kami mendapatkan pemahaman yang baik tentang penggunaan beberapa fungsi tanggal paling umum yang dijelaskan dalam artikel ini.
Memahami Fungsi Tanggal
Pertama-tama mari kita lihat beberapa fungsi tanggal dasar yang dapat membantu kita memenuhi persyaratan manipulasi tanggal, seperti menentukan hari di antara dua tanggal (tanggal pemesanan dan tanggal pengiriman), mendapatkan catatan penjualan minggu lalu berdasarkan tanggal saat ini atau menghitung perkiraan tanggal kedaluwarsa berdasarkan tanggal tanggal produksi dan sebagainya.
Karena tidak ada aturan keras dan cepat, kami mulai menjelajahi fungsi DATEPART terlebih dahulu.
Menggunakan Fungsi DATEPART
Definisi Sederhana
Fungsi DATEPART digunakan untuk mengembalikan bagian dari tanggal tertentu dalam nilai numerik.
Bagian tersebut dapat berupa hari tanggal, bulan tanggal, tahun tanggal dll.
Misalnya, kita dapat menggunakan fungsi DATEPART untuk mendapatkan hari dari tanggal tertentu untuk menentukan apakah pesanan dilakukan pada hari Minggu atau tidak.
Contoh lain adalah mendapatkan bulan dari tanggal tertentu untuk diteruskan ke fungsi tanggal lain untuk diproses lebih lanjut.
Definisi Microsoft
Fungsi ini mengembalikan bilangan bulat yang mewakili datepart . yang ditentukan dari tanggal yang ditentukan .
Kompatibilitas
Menurut dokumentasi Microsoft, fungsi ini kompatibel dengan versi SQL Server berikut:
- SQL Server 2008 plus
- Database SQL Azure
- Gudang Data Azure SQL
- Gudang Data Paralel
Sintaks
DATEPART (datepart , tanggal)
Contoh 1:Mendapatkan Tahun Bagian dari Tanggal
Mari kita juga menentukan tanggal tertentu (OrderDate ) untuk mendapatkan bagian yang diinginkan (Hari, Bulan, Tahun) menggunakan fungsi DATEPART.
Untuk mendapatkan Tahun dari tanggal pemesanan, kita cukup melewati YEAR diikuti oleh Tanggal Pemesanan (@TanggalPesanan) di BAGIAN TANGGAL fungsinya sebagai berikut:
-- Tentukan Tanggal PesananDECLARE @OrderDate DATETIME2='2017-01-11'-- Mendapatkan Tahun Tanggal PesananSELECT DATEPART(YEAR,@OrderDate) sebagai Year_OrderDate
Contoh 2:Mendapatkan Bagian Bulan
Jika kita tertarik untuk mengetahui bulan dari tanggal maka Bulan harus diteruskan ke DATEPART fungsinya sebagai berikut:
-- Tentukan Tanggal PesananDECLARE @OrderDate DATETIME2='2017-01-11'-- Mendapatkan Bulan Tanggal PesananSELECT DATEPART(MONTH,@OrderDate) sebagai Month_OrderDate
Contoh 3:Mendapatkan Bagian Hari
Untuk menemukan bagian Hari dari tanggal, cukup lewati DAY ke DATEPART fungsinya sebagai berikut:
-- Tentukan Tanggal PesananDECLARE @OrderDate DATETIME2='2017-01-11'-- Mendapatkan Hari Tanggal PesananSELECT DATEPART(DAY,@OrderDate) sebagai Day_OrderDate
Contoh 4:Mendapatkan Bagian Hari Minggu
Untuk mendapatkan bagian Hari Minggu dari tanggal, cukup lewati WEEKDAY ke DATEPART fungsinya sebagai berikut:
-- Tentukan Tanggal PesananDECLARE @OrderDate DATETIME2='2017-01-11'-- Mendapatkan Hari Minggu dari Tanggal PesananSELECT DATEPART(WEEKDAY,@OrderDate) sebagai WeekDay_OrderDate
Kami mendapatkan 4, yaitu Rabu mulai dari Minggu, yaitu 1.
Demikian pula, kita juga bisa mendapatkan bagian Seperempat, Jam, Menit, Kedua dari tanggal.
Mari kita beralih ke fungsi tanggal berikutnya.
Menggunakan Fungsi DATEADD
Definisi Sederhana
Fungsi DATEADD digunakan untuk menambah atau mengurangi tanggal.
Misalnya, kita dapat mengetahui tanggal berapa setelah empat hari atau empat hari sebelumnya.
Ini sangat berguna dalam skenario di mana tanggal yang diharapkan harus dihitung berdasarkan tanggal tertentu seperti tanggal kedaluwarsa keanggotaan harus tepat satu tahun dari tanggal pendaftaran.
Contoh lain adalah menghitung tanggal akhir kursus yang harus tepat dua bulan setelah tanggal mulai kursus.
Definisi Microsoft
Fungsi ini menambahkan nomor yang ditentukan nilai (sebagai bilangan bulat yang ditandatangani) ke bagian tanggal yang ditentukan dari masukan tanggal nilai, lalu mengembalikan nilai yang dimodifikasi itu.
Kompatibilitas
Menurut dokumentasi Microsoft, fungsi ini kompatibel dengan versi SQL Server berikut:
- SQL Server 2008 plus
- Database SQL Azure
- Gudang Data Azure SQL
- Gudang Data Paralel
Sintaks
DATEADD (bagian tanggal, nomor, tanggal)
Datepart adalah setiap bagian dari tanggal seperti hari, bulan, tahun, hari kerja, jam dll.
Number adalah nomor bagian tanggal (hari, bulan, tahun, dll.) yang akan ditambahkan atau dikurangi
Tanggal adalah tanggal tertentu yang perlu ditambahkan atau dikurangi menggunakan fungsi DATEADD
Contoh 1:Mendapatkan Tanggal Tahun Depan
Mari kita juga menentukan tanggal tertentu (Tanggal Pendaftaran) yang akan ditambahkan atau dikurangi menggunakan DATEADD fungsi berdasarkan kebutuhan.
Tanggal tahun berikutnya dapat diperoleh dengan menambahkan 1 ke bagian tanggal Tahun.
Untuk mendapatkan tahun berikutnya dari tanggal pendaftaran, kita cukup menambahkan DatePart Tahun diikuti oleh 1 diikuti oleh Tanggal Pendaftaran (@Tanggal Pendaftaran) di DATEADD fungsinya sebagai berikut:
-- Tentukan Tanggal PendaftaranDECLARE @RegDate DATETIME2='2018-07-10'-- Mendapatkan Tahun Depan dari tanggal pendaftaranSELECT DATEADD(YEAR,1,@RegDate) sebagai NextYear_RegDate
Contoh 2:Mendapatkan Tanggal Bulan Depan
Untuk mendapatkan Tanggal Bulan Depan, lewati BULAN datepart ke DATEADD fungsi diikuti dengan jumlah bulan yang ingin kita tambahkan diikuti oleh tanggal yang diberikan yang merupakan tanggal pendaftaran (RegDate) dalam kasus kita.
-- Tentukan Tanggal PendaftaranDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Tampilkan Tanggal Pendaftaran-- Mendapatkan BULAN Berikutnya dari tanggal pendaftaranSELECT DATEADD(MONTH,1,@RegDate) sebagai NextMonth_RegDate
Contoh 3:Mendapatkan Tanggal Hari Berikutnya
Jika kursus dimulai pada hari pendaftaran berikutnya (berikutnya), kami harus melewati DAY dengan 1 karena hari berikutnya menambah hari lain untuk tanggal pendaftaran, yang ditunjukkan sebagai berikut:
-- Tentukan Tanggal PendaftaranDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Tampilkan Tanggal Pendaftaran-- Mendapatkan HARI Berikutnya dari tanggal pendaftaranSELECT DATEADD(DAY,1,@RegDate) sebagai NextDAY_RegDate
Contoh 4:Menyiapkan Tanggal Laporan Penjualan Harian
Sekarang mari kita fokus pada skenario yang sedikit rumit yang sering digunakan dalam pengembangan laporan keuangan harian.
Jika kita ingin membuat laporan penjualan harian, maka harus menampilkan data kemarin, karena hari ini belum selesai dan hari lengkap terakhir adalah kemarin seperti yang dibahas di awal artikel ini.
Pada akhirnya, kita juga perlu mengonversi Date Time kemarin menjadi nilai Date only untuk memudahkan laporan tercakup sepanjang hari.
Untuk mendapatkan tanggal kemarin berdasarkan tanggal hari ini, kita perlu menambahkan “-1 hari” ke tanggal saat ini sebagai berikut:
-- Tentukan Tanggal Saat IniDECLARE @CurrentDate DATETIME2=GETDATE()SELECT @CurrentDate AS CurrentDate -- Tampilkan Tanggal Pendaftaran-- Mendapatkan Tanggal dan Waktu Kemarin dari tanggal saat iniSELECT DATEADD(DAY,-1,@CurrentDate) sebagai kemarinDateTime_CurrentDate-- Mengonversi Kemarin DateTime menjadi Date onlyPILIH CAST(DATEADD(DAY,-1,@CurrentDate) AS DATE)sebagai KemarinDateOnly_CurrentDate
Menggunakan Fungsi DATEDIFF
Definisi Sederhana
Fungsi DATEDIFF digunakan untuk menentukan perbedaan hari, bulan, tahun, jam, dll. antara dua tanggal.
Misalnya, kita dapat mengetahui berapa hari telah berlalu antara dua tanggal.
Ini juga sangat berguna dalam skenario di mana kita perlu menyelidiki perbedaan antara tanggal pengiriman pesanan yang diharapkan dan tanggal pengiriman pesanan yang sebenarnya.
Contoh lain adalah pelacakan waktu, yang berarti memahami berapa jam yang telah dihabiskan untuk proyek tertentu sejak dimulai hingga sekarang.
Definisi Microsoft
Fungsi ini mengembalikan hitungan (sebagai nilai integer yang ditandatangani) dari batas bagian tanggal yang ditentukan yang dilintasi antara tanggal mulai yang ditentukan dan tanggal akhir .
Kompatibilitas
Menurut dokumentasi Microsoft, fungsi ini kompatibel dengan versi SQL Server berikut:
- SQL Server 2008 plus
- Database SQL Azure
- Gudang Data Azure SQL
- Gudang Data Paralel
Sintaks
DATEDIFF ( datepart , startdate , enddate )Datepart adalah setiap bagian dari tanggal seperti hari, bulan, tahun, hari kerja, jam dll.
Contoh 1:Memahami Perbedaan Hari
Mari kita coba memahami bagaimana DATEDIFF fungsi berfungsi.
Jika kita mencoba mencari perbedaan hari antara 01 Juli 2018 dan 02 Juli 2018, kita akan mendapatkan 1 hari, yang berarti mengurangi tanggal akhir dari tanggal mulai untuk mendapatkan perbedaan:
SELECT DATEDIFF(DAY,'01 JULY 2018','02 JULY 2018') AS Days_Between_Two_Consecutive_DatesSELECT DATEDIFF(DAY,'01 JULY 2018','03 JULY 2018') AS Days_Between_01_July_03_July
Contoh 2:Mendapatkan Hari antara Pemesanan dan Pengiriman
Mari kita tentukan dua tanggal yang berbeda, Tanggal Pemesanan dan Tanggal Pengiriman, yang akan digunakan untuk menentukan perbedaan hari, bulan, tahun, jam dll.
Untuk mengetahui jumlah hari antara tanggal pemesanan dan tanggal pengiriman, bagian tanggal DAY dimasukkan ke DATEDIFF fungsi diikuti oleh Tanggal Mulai (TanggalPesanan) dan Tanggal Berakhir (Tanggal Pengiriman) :
-- Tentukan Tanggal Pesanan dan Tanggal Pengiriman PesananDECLARE @OrderDate DATETIME2='28 Juli 2018'DECLARE @DeliveryDate DATETIME2='07 Agustus 2018'SELECT @OrderDate AS OrderDate,@DeliveryDate sebagai DeliveryDate-- Tampilkan Tanggal Pesanan dan Pengiriman-- Mendapatkan perbedaan hari antara tanggal pemesanan dan tanggal pengirimanSELECT DATEDIFF(DAY,@OrderDate,@DeliveryDate) sebagai Days_Between_Order_and_Delivery
Contoh 3:Mendapatkan Jam Proyek (Pelacakan Waktu)
Ini adalah contoh menarik dari pelacakan waktu menggunakan fungsi DATEDIFF.
Misalnya, kami tertarik untuk mengetahui berapa hari dan hari dalam jam dan hari dalam menit yang kami habiskan untuk proyek tertentu, dan kemudian kami akan memasukkan bagian tanggal DAY ke fungsi DATEDIFF, di mana tanggal mulainya adalah tanggal saat proyek dimulai dan tanggal berakhirnya adalah tanggal hari ini diikuti dengan melewati HOUR dan kemudian melewati MENIT sebagai berikut:
-- Tentukan Tanggal Mulai ProyekDECLARE @ProjectStartDate DATETIME2='10 Nov 2018'SELECT @ProjectStartDate SEBAGAI ProjectStartDate-- Tampilkan Tanggal Mulai Proyek-- Mendapatkan Jumlah hari yang dihabiskan untuk proyek sejauh iniSELECT DATEDIFF(DAY,@ProjectStartDate,GETDATE( )) sebagai Project_Days_So_Far-- Mendapatkan Jumlah jam yang dihabiskan untuk proyek sejauh iniSELECT DATEDIFF(HOUR,@ProjectStartDate,GETDATE()) sebagai Project_Hours_So_Far-- Mendapatkan Jumlah menit yang dihabiskan untuk proyek sejauh iniSELECT DATEDIFF(MINUTE,@ProjectStartDate,GETDATE( )) sebagai Project_Minutes_So_Far
Selamat, Anda telah berhasil belajar menggunakan fungsi T-SQL DATEADD, DATEDIFF, dan DATEPART.
Hal yang Dapat Dilakukan
Sekarang setelah Anda mengetahui beberapa fungsi tanggal dasar, tantang diri Anda dengan mencoba hal-hal yang disebutkan di bawah ini:
- Silakan lihat artikel saya sebelumnya Prosedur Laporan Pengujian Unit – Langsung ke Mulai TDDD Bagian-4 untuk menyiapkan contoh database SQLDevBlogReportTDD, lalu buat tampilan untuk mengetahui jumlah bulan berdasarkan tanggal pendaftaran Penulis.
- Silakan lihat artikel saya sebelumnya Menyederhanakan Pengujian Unit Prosedur Tersimpan Utama yang Juga Memanggil Prosedur Utilitas untuk membuat contoh database SQLBookShop dan menambahkan DeliveryDate kolom ke Pesanan Buku tabel, lalu buat prosedur tersimpan baru ProcessOrder yang menggunakan DATEADD berfungsi untuk menambahkan perkiraan pengiriman lima hari setelah tanggal pemesanan.
- Silakan lihat artikel saya sebelumnya Langsung ke Mulai Test-Driven Database Development (TDDD) – Bagian 3 dan coba buat laporan harian menggunakan fungsi DATEADD T-SQL dengan memodifikasi data pada contoh database SQLDevBlogReportTDD sehingga ada cukup data untuk ditampilkan dalam laporan.