DATE_DIFF sangat baik untuk menghitung jumlah hari dari pendaftaran hingga pembatalan atau jumlah jam dari masuk hingga keluar.
DATE_TRUNC memangkas sebuah tanggal ke hari, minggu, bulan, atau tahun terdekat. Misalnya, kode berikut akan memberikan Senin terdekat untuk stempel waktu my_timestamp:
DATE_TRUNC sangat berguna untuk mengagregasi data. Misalnya, kita dapat menggunakannya untuk menemukan jumlah Monthly Active Users (MAU) dengan memangkas ke tanggal mulai bulan terdekat.
Namun tidak setiap implementasi SQL memiliki fungsi-fungsi hebat ini. Untuk kode Learn SQL from Scratch kami, kami menggunakan SQLite, sebuah implementasi SQL yang ringan dan dapat dijalankan pada satu instance Docker. SQLite sangat cocok untuk backend situs web dan proyek kecil, tetapi tidak memiliki dua fungsi favorit saya. Untungnya, ada cara mengakalinya.
Untuk meniru DATE_DIFF, kita dapat menggunakan fungsi yang kurang dikenal bernama juliandate. Menurut Wikipedia, "Julian Day Number (JDN) adalah bilangan bulat yang diberikan untuk satu hari matahari penuh dalam hitungan hari Julian mulai dari tengah hari waktu Universal, dengan nomor hari Julian 0 diberikan untuk hari yang dimulai pada tengah hari Senin, 1 Januari, 4713 SM". Dengan mengonversi tanggal menjadi angka pecahan, kita dapat menggunakan pengurangan untuk menemukan selisih antara dua stempel waktu.
Kita bahkan dapat mengonversi jawabannya ke jam dengan mengalikan dengan 24 atau ke menit dengan mengalikan dengan 24 * 60.
Kita dapat meniru sebagian fungsi DATE_TRUNC dengan menggunakan strftime. Fungsi ini mengonversi stempel waktu menjadi string dengan keluaran tertentu.
%d hari dalam bulan: 00 %f detik pecahan: SS.SSS %H jam: 00-24 %j hari dalam tahun: 001-366 %J nomor hari Julian %m bulan: 01-12 %M menit: 00-59 %s detik sejak 1970-01-01 %S detik: 00-59 %w hari dalam minggu 0-6 dengan Minggu==0 %W minggu dalam tahun: 00-53 %Y tahun: 0000-9999
Biasanya, kita mungkin menggunakannya untuk konversi antar format stempel waktu seperti YYYY-MM-DD ke MM-DD-YYYY:
Tetapi kita dapat dengan cerdas memilih pemformatan untuk memangkas ke titik yang sesuai. Misalnya, jika kita ingin memangkas ke bulan terdekat, kita dapat:
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai kueri SQL yang kompleks yang diperlukan untuk menjawab berbagai pertanyaan ilmu data dan menyiapkan set data yang kuat untuk analisis di PostgreSQL.
Beberapa fungsi paling berguna dalam implementasi SQL pada Postgres (seperti Amazon Redshift) adalah
DATE_DIFFdanDATE_TRUNC:DATE_DIFFmemberikan jumlah waktu yang berlalu antara dua tanggal berbeda. Misalnya, kode berikut akan memberikan jumlah hari antaradate1dandate2:DATE_DIFFsangat baik untuk menghitung jumlah hari dari pendaftaran hingga pembatalan atau jumlah jam dari masuk hingga keluar.DATE_TRUNCmemangkas sebuah tanggal ke hari, minggu, bulan, atau tahun terdekat. Misalnya, kode berikut akan memberikan Senin terdekat untuk stempel waktumy_timestamp:DATE_TRUNCsangat berguna untuk mengagregasi data. Misalnya, kita dapat menggunakannya untuk menemukan jumlah Monthly Active Users (MAU) dengan memangkas ke tanggal mulai bulan terdekat.Namun tidak setiap implementasi SQL memiliki fungsi-fungsi hebat ini. Untuk kode Learn SQL from Scratch kami, kami menggunakan SQLite, sebuah implementasi SQL yang ringan dan dapat dijalankan pada satu instance Docker. SQLite sangat cocok untuk backend situs web dan proyek kecil, tetapi tidak memiliki dua fungsi favorit saya. Untungnya, ada cara mengakalinya.
Untuk meniru
DATE_DIFF, kita dapat menggunakan fungsi yang kurang dikenal bernamajuliandate. Menurut Wikipedia, "Julian Day Number (JDN) adalah bilangan bulat yang diberikan untuk satu hari matahari penuh dalam hitungan hari Julian mulai dari tengah hari waktu Universal, dengan nomor hari Julian 0 diberikan untuk hari yang dimulai pada tengah hari Senin, 1 Januari, 4713 SM". Dengan mengonversi tanggal menjadi angka pecahan, kita dapat menggunakan pengurangan untuk menemukan selisih antara dua stempel waktu.Kita bahkan dapat mengonversi jawabannya ke jam dengan mengalikan dengan
24atau ke menit dengan mengalikan dengan24 * 60.Kita dapat meniru sebagian fungsi
DATE_TRUNCdengan menggunakanstrftime. Fungsi ini mengonversi stempel waktu menjadi string dengan keluaran tertentu.%d hari dalam bulan: 00 %f detik pecahan: SS.SSS %H jam: 00-24 %j hari dalam tahun: 001-366 %J nomor hari Julian %m bulan: 01-12 %M menit: 00-59 %s detik sejak 1970-01-01 %S detik: 00-59 %w hari dalam minggu 0-6 dengan Minggu==0 %W minggu dalam tahun: 00-53 %Y tahun: 0000-9999
Biasanya, kita mungkin menggunakannya untuk konversi antar format stempel waktu seperti YYYY-MM-DD ke MM-DD-YYYY:
Tetapi kita dapat dengan cerdas memilih pemformatan untuk memangkas ke titik yang sesuai. Misalnya, jika kita ingin memangkas ke bulan terdekat, kita dapat:
Atau kita dapat memangkas ke minggu terdekat dengan menggunakan:
Dengan dua trik mudah ini, Anda dapat menggunakan SQLite untuk beberapa analisis hebat yang sama seperti Amazon Redshift!
Jika Anda ingin mempelajari lebih lanjut tentang dasar-dasar SQL, ikuti kursus Intro to SQL for Data Science dari DataCamp dan lihat SQL Tutorial for Beginners kami.