DATEPART (SQL Bertransaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
Fungsi ini mengembalikan bilangan bulat yang mewakili bagian tanggal yang ditentukan dari tanggal yang ditentukan.
Lihat Jenis dan Fungsi Data Tanggal dan Waktu (SQL T-SQL) untuk gambaran umum semua jenis dan fungsi data tanggal dan waktu transact-SQL.
Sintaks
DATEPART ( datepart , date )
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
datepart
Bagian tertentu dari argumen tanggal yang DATEPART akan mengembalikan bilangan bulat. Tabel ini mencantumkan semua argumen datepart yang valid.
Catatan
DATEPART tidak menerima variabel yang ditentukan pengguna yang setara untuk argumen datepart .
| datepart | Singkatan |
|---|---|
| tahun | yy, yyyy |
| kuartal | qq, q |
| bulan | mm, m |
| dayofyear | dy, y |
| hari | dd, d |
| minggu | wk, ww |
| hari kerja | Dw |
| jam | hh |
| menit | mi, n |
| detik | ss, s |
| milidetik | ms |
| mikrosecond | Mcs |
| nanodetik | Ns |
| tzoffset | Tz |
| iso_week | isowk, isoww |
date
Ekspresi yang diselesaikan ke salah satu jenis data berikut:
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
Untuk tanggal, DATEPART akan menerima ekspresi kolom, ekspresi, string literal, atau variabel yang ditentukan pengguna. Gunakan empat digit tahun untuk menghindari masalah ambiguitas. Lihat Mengonfigurasi Opsi Konfigurasi Server cutoff dua digit tahun untuk informasi tentang dua digit tahun.
Jenis Hasil
int
Tampilkan Nilai
Setiap datepart dan singkatannya mengembalikan nilai yang sama.
Nilai yang dikembalikan tergantung pada lingkungan bahasa yang ditetapkan dengan menggunakan SET LANGUAGE, dan dengan Opsi Konfigurasi Server bahasa default dari login. Nilai yang dikembalikan tergantung pada SET DATEFORMAT jika tanggal adalah string harfiah dari beberapa format. SET DATEFORMAT tidak mengubah nilai hasil saat tanggal adalah ekspresi kolom dari jenis data tanggal atau waktu.
Tabel ini mencantumkan semua argumen datepart , dengan nilai pengembalian yang sesuai, untuk pernyataan SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). Argumen tanggal memiliki tipe data datetimeoffset(7). Dua posisi terakhir dari nilai pengembalian datepartnanodetik selalu 00 dan nilai ini memiliki skala 9:
.123456700
| datepart | Mengembalikan nilai |
|---|---|
| tahun, yyyy, yy | 2007 |
| kuartal, qq, q | 4 |
| bulan, mm, m | 10 |
| dayofyear, dy, y | 303 |
| hari, dd, d | 30 |
| minggu, wk, ww | 44 |
| hari kerja, dw | 3 |
| jam, hh | 12 |
| menit, n | 15 |
| kedua, ss, s | 32 |
| milidetik, ms | 123 |
| microsecond, mcs | 123456 |
| nanodetik, ns | 123456700 |
| tzoffset, tz | 310 |
| iso_week, isowk, ioww | 44 |
Argumen datepart mingguan dan hari kerja
Selama datepartminggu (wk, ww) atau hari kerja (dw), DATEPART nilai pengembalian tergantung pada nilai yang ditetapkan oleh SET DATEFIRST.
1 Januari setiap tahun menentukan nomor awal untuk datepartminggu. Contohnya:
DATEPART (wk, 'Jan 1, xxxx') = 1
di mana xxxx adalah tahun apa pun.
Tabel ini memperlihatkan nilai pengembalian untuk datepartminggu dan hari kerja untuk '2007-04-21 ' untuk setiap argumen DATEFIRST SET. 1 Januari 2007 jatuh pada hari Senin. 21 April 2007 jatuh pada hari Sabtu. Untuk Bahasa Inggris A.S.,
SET DATEFIRST 7 -- ( Sunday )
berfungsi sebagai default. Setelah mengatur DATEFIRST, gunakan pernyataan SQL yang disarankan ini untuk nilai tabel datepart:
SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')
| SET DATEFIRST argumen |
minggu Kembali |
weekday Kembali |
|---|---|---|
| 1 | 16 | 6 |
| 2 | 17 | 5 |
| 3 | 17 | 4 |
| 4 | 17 | 3 |
| 5 | 17 | 2 |
| 6 | 17 | 1 |
| 7 | 16 | 7 |
Argumen datepart tahun, bulan, dan hari
Nilai yang dikembalikan untuk DATEPART (tahun, tanggal), DATEPART (bulan, tanggal), dan DATEPART (hari, tanggal) sama dengan yang dikembalikan oleh fungsi YEAR, MONTH, dan DAY, masing-masing.
iso_week datepart
ISO 8601 mencakup sistem tanggal minggu ISO, sistem penomoran selama berpekanan. Setiap minggu dikaitkan dengan tahun di mana Kamis terjadi. Misalnya, minggu ke-1 2004 (2004W01) dibahas Senin, 29 Desember 2003 hingga Minggu, 4 Januari 2004. Negara/wilayah Eropa biasanya menggunakan gaya penomoran ini. Negara/wilayah non-Eropa biasanya tidak menggunakannya.
Catatan: jumlah minggu tertinggi dalam setahun bisa 52 atau 53.
Sistem penomoran negara/wilayah yang berbeda mungkin tidak mematuhi standar ISO. Tabel ini menunjukkan enam kemungkinan:
| Hari pertama dalam seminggu | Minggu pertama tahun berisi | Minggu ditetapkan dua kali | Digunakan oleh/dalam |
|---|---|---|---|
| Hari Minggu | 1 Januari, Sabtu Pertama, 1-7 hari dalam setahun |
Ya | Amerika Serikat |
| Senin | 1 Januari, Minggu Pertama, 1-7 hari dalam setahun |
Ya | Sebagian besar Eropa dan Inggris Raya |
| Senin | 4 Januari, Kamis pertama, 4-7 hari dalam setahun |
Tidak | ISO 8601, Norwegia, dan Swedia |
| Senin | 7 Januari, Senin pertama, 7 hari dalam setahun |
Tidak | |
| Rabu | 1 Januari, Selasa Pertama, 1-7 hari dalam setahun |
Ya | |
| Sabtu | 1 Januari, Jumat Pertama, 1-7 hari dalam setahun |
Ya |
tzoffset
DATEPART mengembalikan nilai tzoffset (tz) sebagai jumlah menit (ditandatangani). Pernyataan ini mengembalikan offset zona waktu 310 menit:
SELECT DATEPART (tzoffset, '2007-05-10 00:00:01.1234567 +05:10');
DATEPART merender nilai tzoffset sebagai berikut:
- Untuk datetimeoffset dan datetime2, tzoffset mengembalikan offset waktu dalam menit, di mana offset untuk datetime2 selalu 0 menit.
- Untuk jenis data yang dapat secara implisit mengonversi ke datetimeoffset atau datetime2,
DATEPARTmengembalikan offset waktu dalam hitung menit. Pengecualian: jenis data tanggal/waktu lainnya. - Parameter dari semua jenis lainnya mengakibatkan kesalahan.
Argumen tanggal smalldatetime
Untuk nilai tanggalsmalldatetime, DATEPART mengembalikan detik sebagai 00.
Default Dikembalikan untuk datepart Yang Tidak ada dalam Argumen tanggal
Jika jenis data argumen tanggal tidak memiliki datepart yang ditentukan, DATEPART akan mengembalikan default untuk datepart tersebut hanya ketika literal ditentukan untuk tanggal.
Misalnya, hari-bulan-tahun default untuk jenis data tanggal apa pun adalah 1900-01-01. Pernyataan ini memiliki argumen bagian tanggal untuk datepart, argumen waktu untuk tanggal, dan mengembalikan 1900, 1, 1, 1, 2.
SELECT DATEPART(year, '12:10:30.123')
,DATEPART(month, '12:10:30.123')
,DATEPART(day, '12:10:30.123')
,DATEPART(dayofyear, '12:10:30.123')
,DATEPART(weekday, '12:10:30.123');
Jika tanggal ditentukan sebagai variabel atau kolom tabel, dan jenis data untuk variabel atau kolom tersebut tidak memiliki datepart yang ditentukan, DATEPART akan mengembalikan kesalahan 9810. Dalam contoh ini, variabel @t memiliki jenis data waktu . Contoh gagal karena tanggal bagian tahun tidak valid untuk jenis data waktu :
DECLARE @t time = '12:10:30.123';
SELECT DATEPART(year, @t);
Detik pecahan
Pernyataan ini menunjukkan bahwa DATEPART mengembalikan detik pecahan:
SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456
SELECT DATEPART(nanosecond, '00:00:01.1234567'); -- Returns 123456700
Keterangan
DATEPART dapat digunakan dalam daftar pilih, klausa WHERE, HAVING, GROUP BY, dan ORDER BY.
DATEPART secara implisit mentransmisikan literal string sebagai jenis datetime2 di SQL Server 2019 (15.x). Ini berarti bahwa DATENAME tidak mendukung format YDM saat tanggal diteruskan sebagai string. Anda harus secara eksplisit mentransmisikan string ke jenis datetime atau smalldatetime untuk menggunakan format YDM.
Contoh
Contoh ini mengembalikan tahun dasar. Tahun dasar membantu perhitungan tanggal. Dalam contoh, angka menentukan tanggal. Perhatikan bahwa SQL Server menafsirkan 0 sebagai 1 Januari 1900.
SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);
-- Returns: 1900 1 1
Contoh ini mengembalikan bagian hari dari tanggal 12/20/1974.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 20
Contoh ini mengembalikan bagian tahun dari tanggal 12/20/1974.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 1974
