Mengembalikan nomor minggu dalam tahun untuk tanggal tertentu. Gunakan parameter date_part untuk menentukan hari yang menjadi awal minggu.
Sintaksis
BIGINT|INT WEEKOFYEAR (STRING|DATETIME|DATE|TIMESTAMP|TIMESTAMP_NTZ <date> [, STRING <date_part>])Parameter
date (wajib)
Tipe yang diterima: STRING, DATETIME, DATE, TIMESTAMP, atau TIMESTAMP_NTZ.
Format STRING:
yyyy-mm-dd hh:mi:ssPada edisi tipe data kompatibel Hive: format STRING adalah
yyyy-mm-dd, dan parameterdate_parttidak didukung.
date_part (opsional)
Nilai STRING yang menentukan hari pertama dalam minggu. Nilai yang valid:
| Nilai | Perilaku |
|---|---|
week | Minggu dimulai pada hari Senin. Setara dengan week(monday). |
week(weekday) | Minggu dimulai pada hari yang ditentukan. Ganti weekday dengan SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, atau SATURDAY. |
isoweek | Mengikuti ISO 8601: minggu dimulai pada hari Senin, dan minggu pertama dalam tahun harus berisi minimal empat hari. |
Jika parameter date_part dihilangkan, minggu dimulai pada hari Senin dan mengikuti aturan batas tahun: minggu yang mencakup 1 Januari termasuk dalam tahun yang memiliki mayoritas hari dalam minggu tersebut (empat hari atau lebih).
Nilai kembali
Mengembalikan BIGINT atau INT tergantung pada tipe input:
| Tipe input | Tipe nilai kembali |
|---|---|
| DATETIME | BIGINT |
| STRING (edisi non-kompatibel Hive) | BIGINT |
| STRING (edisi kompatibel Hive) | INT |
| DATE, TIMESTAMP, TIMESTAMP_NTZ | INT |
| Format STRING tidak valid | NULL |
| NULL | NULL |
| Tipe lainnya | Error |
Catatan penggunaan
Tipe DATE dan TIMESTAMP tidak didukung di MaxCompute 1.0. Untuk menggunakan tipe ini, aktifkan tipe data MaxCompute 2.0:
SET odps.sql.type.system.odps2=true;Pada edisi tipe data kompatibel Hive, parameter
date_parttidak didukung dan input STRING harus mengikuti formatyyyy-mm-dd.
Contoh
Contoh 1: Penetapan minggu di batas tahun
Ketika parameter date_part dihilangkan, minggu di batas tahun termasuk dalam tahun yang memiliki mayoritas hari dalam minggu tersebut.
-- 2024-12-29 berada dalam minggu yang mayoritas harinya jatuh di tahun 2024.
-- Mengembalikan 52.
SELECT WEEKOFYEAR(TO_DATE('20241229', 'YYYYMMDD'));
-- Minggu 2025-12-29 berlangsung dari Senin 2025-12-29 hingga Minggu 2026-01-04.
-- Empat dari tujuh hari jatuh di tahun 2026, sehingga minggu ini merupakan minggu ke-1 tahun 2026.
-- Mengembalikan 1.
SELECT WEEKOFYEAR(TO_DATE('20251229', 'YYYYMMDD'));
-- 2026-01-01 berada dalam minggu yang sama seperti di atas — minggu ke-1 tahun 2026.
-- Mengembalikan 1.
SELECT WEEKOFYEAR(TO_DATE('20260101', 'YYYYMMDD'));Contoh 2: Mengatur hari pertama dalam minggu
Parameter date_part mengubah penempatan minggu suatu tanggal. Perhatikan bahwa memberikan week(monday) secara eksplisit menghasilkan nilai berbeda dibandingkan dengan nilai default (tanpa date_part), meskipun keduanya menggunakan Senin sebagai awal minggu.
-- Aktifkan tipe data MaxCompute 2.0 untuk menggunakan tipe DATE.
SET odps.sql.type.system.odps2=true;
-- Default (tanpa date_part): awal minggu Senin dengan ambang batas empat hari.
-- Mengembalikan 14.
SELECT WEEKOFYEAR(DATE '2025-03-31');
-- Atur secara eksplisit agar minggu dimulai pada hari Senin.
-- Mengembalikan 13.
SELECT WEEKOFYEAR(DATE '2025-03-31', 'week(monday)');
-- Minggu dimulai pada hari Minggu.
-- Mengembalikan 13.
SELECT WEEKOFYEAR(DATETIME '2025-03-31 10:32:00', 'week(sunday)');
-- Minggu dimulai pada hari Jumat.
-- Mengembalikan 13.
SELECT WEEKOFYEAR(TIMESTAMP_NTZ '2025-03-31 10:32:00.123', 'week(friday)');Contoh 3: Penomoran minggu ISO
Gunakan isoweek untuk penomoran minggu sesuai ISO 8601. Minggu dimulai pada hari Senin dan minggu pertama dalam tahun harus berisi minimal empat hari.
SET odps.sql.type.system.odps2=true;
-- Menurut ISO 8601, 2025-01-06 berada dalam minggu ke-2.
-- Mengembalikan 2.
SELECT WEEKOFYEAR(DATE '2025-01-06', 'isoweek');Contoh 4: Variasi tipe input
-- Input DATETIME mengembalikan BIGINT.
-- Mengembalikan 1.
SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00');
-- DATETIME dengan week(monday) eksplisit.
-- Mengembalikan 0.
SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00', 'week(monday)');
-- Input STRING dalam format yyyy-mm-dd hh:mi:ss.
-- Mengembalikan 27.
SELECT WEEKOFYEAR('2025-07-01 12:30:15');
-- Input TIMESTAMP (memerlukan tipe data MaxCompute 2.0).
SET odps.sql.type.system.odps2=true;
-- Mengembalikan 30.
SELECT WEEKOFYEAR(TIMESTAMP '2025-07-21 00:30:15.123');Contoh 5: Input NULL dan tidak valid
-- String tidak sesuai format yyyy-mm-dd hh:mi:ss.
-- Mengembalikan NULL.
SELECT WEEKOFYEAR('20141231');
-- Input NULL mengembalikan NULL.
SELECT WEEKOFYEAR(NULL);Fungsi terkait
WEEKOFYEAR adalah fungsi tanggal. Untuk daftar lengkap fungsi tanggal, lihat Fungsi tanggal.