Jika Anda perlu mengekstrak nomor minggu ISO dari tanggal di SQL Server, Anda dapat menggunakan iso_week
argumen saat memanggil DATEPART()
fungsi. Sebagai alternatif, Anda dapat menggunakan isowk
atau isoww
argumen untuk melakukan hal yang sama.
Dengan “ISO week”, saya mengacu pada standar tanggal dan waktu ISO 8601.
Minggu ISO dimulai pada hari Senin dan minggu pertama dalam setahun berisi 4 Januari tahun itu. Oleh karena itu, tanggal awal Januari mungkin menjadi bagian dari minggu ke-52 atau ke-53 tahun sebelumnya, dan tanggal akhir Desember menjadi bagian dari minggu pertama tahun berikutnya.
Ini berarti bahwa ketika Anda mengekstrak nomor minggu dari suatu tanggal, Anda bisa mendapatkan hasil yang berbeda tergantung pada apakah Anda menggunakan kalender Gregorian atau standar tanggal dan waktu ISO 8601.
Contoh
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Hasil:
53
Dalam hal ini, tanggalnya adalah 1 Januari 2021, tetapi dalam istilah ISO, ini adalah minggu ke-53 tahun 2020.
Perbandingan dengan Gregorian
Berikut contoh lain untuk membandingkannya dengan minggu Gregorian.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Hasil:
+--------+------------+ | week | iso_week | |--------+------------| | 1 | 53 | +--------+------------+
Jadi kita dapat melihat bahwa tanggal yang sama dapat memiliki nomor minggu yang berbeda tergantung pada apakah kita menggunakan kalender Gregorian atau standar ISO.
Kita bisa melakukan hal yang sama dengan tanggal menjelang akhir tahun sebelumnya.
DECLARE @date date = '2020-12-27';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Hasil:
+--------+------------+ | week | iso_week | |--------+------------| | 53 | 52 | +--------+------------+
Argumen Alternatif
Seperti disebutkan, sebagai alternatif dapat menggunakan isowk
atau isoww
untuk mengembalikan nomor minggu ISO.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(iso_week, @date) AS iso_week,
DATEPART(isowk, @date) AS isowk,
DATEPART(isoww, @date) AS isoww;
Hasil:
+------------+---------+---------+ | iso_week | isowk | isoww | |------------+---------+---------| | 53 | 53 | 53 | +------------+---------+---------+