DATEPART (Transact-SQL)
Berlaku untuk: SQL Server 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 (Transact-SQL) untuk gambaran umum semua jenis dan fungsi data tanggal dan waktu Transact-SQL.
Sintaks
DATEPART ( datepart , date )
Argumen
datepart
Bagian spesifik 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 tahun dua digit.
Jenis Hasil
int
Tampilkan Nilai
Setiap datepart dan singkatannya mengembalikan nilai yang sama.
Nilai pengembalian tergantung pada lingkungan bahasa yang ditetapkan dengan menggunakan SET LANGUAGE, dan dengan Opsi Konfigurasi Server bahasa default dari login. Nilai yang dikembalikan bergantung pada SET DATEFORMAT jika tanggal adalah literal string dari beberapa format. SET DATEFORMAT tidak mengubah nilai pengembalian saat tanggal adalah ekspresi kolom dari tipe 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 datepart nanodetik selalu 00
dan nilai ini memiliki skala 9:
.123456700
datepart | Nilai hasil |
---|---|
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, isoww | 44 |
Argumen datepart mingguan dan hari kerja
Untuk datepart minggu (wk, ww) atau hari kerja (dw),DATEPART
nilai pengembalian tergantung pada nilai yang ditetapkan oleh SET DATEFIRST.
1 Januari setiap tahun mendefinisikan nomor awal untuk datepart minggu. Contohnya:
DATEPART (wk, 'Jan 1, xxxx') = 1
di mana xxxx adalah tahun apa pun.
Tabel ini memperlihatkan nilai pengembalian untuk datepart minggu dan hari kerja untuk '2007-04-21 ' untuk setiap argumen SET DATEFIRST. 1 Januari 2007 jatuh pada hari Senin. 21 April 2007 jatuh pada hari Sabtu. Untuk 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.
iso_week datepart
ISO 8601 mencakup sistem tanggal minggu ISO, sistem penomoran selama berpekan-minggu. Setiap minggu dikaitkan dengan tahun di mana Kamis terjadi. Misalnya, minggu ke-1 tahun 2004 (2004W01) tercakup 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 dari berbagai negara/wilayah 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 |
No | ISO 8601, Norwegia, dan Swedia |
Senin | 7 Januari, Senin pertama, Tujuh hari dalam setahun |
No | |
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,
DATEPART
mengembalikan offset waktu dalam hitung menit. Pengecualian: jenis data tanggal/waktu lainnya. - Parameter dari semua jenis lainnya mengakibatkan kesalahan.
Argumen tanggal smalldatetime
Untuk nilai tanggal smalldatetime, 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 pemilihan, klausa WHERE, HAVING, GROUP BY, dan ORDER BY.
DATEPART secara implisit melemparkan literal string sebagai jenis datetime2 di SQL Server 2008 (10.0.x) dan yang lebih baru. 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 menginterpretasikan 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