Oke jadi saya punya laporan yang membandingkan minggu ini vs minggu lalu dan pelanggan kami memperhatikan bahwa data mereka "funky". Setelah diselidiki lebih lanjut, kami mendapati bahwa itu tidak berjalan berminggu-minggu dengan benar sesuai dengan standar ISO. Saya menjalankan skrip ini sebagai ujian.
SET DATEFIRST 1
SELECT DATEPART(WEEK, '3/26/13')
, DATEPART(WEEK, '3/27/12')
, DATEPART(WEEK, '3/20/12')
, DATEPART(WEEK, '1/2/12')
SELECT DATEPART(ISO_WEEK, '3/26/13')
, DATEPART(ISO_WEEK, '3/27/12')
, DATEPART(ISO_WEEK, '3/20/12')
, DATEPART(ISO_WEEK, '1/2/12')
Saat dijalankan saya mendapat hasil ini.
Saya pikir ini aneh dan jadi saya melakukan penggalian lagi dan menemukan bahwa SQL Server menghitung 1 Januari sebagai minggu pertama tahun itu di mana ISO menghitung Minggu pertama pada Januari sebagai minggu pertama tahun ini.
Pertanyaannya kemudian menjadi dua kali lipat. Pertanyaan 1 mengapa ini? Pertanyaan 2 apakah ada cara untuk mengubah ini jadi saya tidak harus mengubah semua kode saya untuk digunakan di ISO_Week
mana-mana?
Ada beberapa otoritas dengan asumsi kondisi yang berbeda untuk minggu pertama tahun ini. Beberapa menganggap hari pertama dalam minggu itu dimulai pada minggu pertama tetapi ide yang paling umum adalah bahwa minggu pertama yang memiliki Kamis pertama adalah minggu pertama tahun itu.
Jadi
ISO_WEEK
menerima itu dan seperti pada tahun 2010, 2011 atau 2012 seperti yang Anda dapat memeriksa bahwaISO_WEEK
mengatakan Januari 1 adalah 52 atau 53 minggu sementaraWEEK
atauWK
atauWW
mengatakan mereka adalah minggu pertama.sumber