datetime (Transact-SQL)
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Menentukan tanggal yang dikombinasikan dengan waktu hari dengan detik pecahan yang didasarkan pada jam 24 jam.
Hindari menggunakan tanggalwaktu untuk pekerjaan baru. Sebagai gantinya , gunakan jenis data time, date, datetime2, dan datetimeoffset . Jenis-jenis ini selaras dengan Standar SQL, dan lebih portabel. time, datetime2 , dan datetimeoffset memberikan presisi lebih detik. datetimeoffset menyediakan dukungan zona waktu untuk aplikasi yang disebarkan secara global.
Deskripsi
Properti | Nilai |
---|---|
Sintaksis | DATETIME |
Penggunaan | DECLARE @MyDatetime DATETIME; CREATE TABLE Table1 (Column1 DATETIME); |
Format literal string default (digunakan untuk klien tingkat bawah) | Tidak berlaku |
Rentang tanggal | 1753-01-01 (1 Januari 1753) hingga 9999-12-31 (31 Desember 9999) |
Rentang waktu | 00:00:00 hingga 23:59:59.997 |
Rentang offset zona waktu | Tidak |
Rentang elemen | yyyy adalah empat digit dari 1753 hingga 9999 yang mewakili satu tahun.MM adalah dua digit, mulai dari 01 hingga 12 , yang mewakili sebulan dalam tahun yang ditentukan.dd adalah dua digit, mulai dari 01 hingga 31 tergantung pada bulan, yang mewakili hari dari bulan yang ditentukan.HH adalah dua digit, mulai dari 00 hingga 23 , yang mewakili jam.mm adalah dua digit, mulai dari 00 hingga 59 , yang mewakili menit.ss adalah dua digit, mulai dari 00 hingga 59 , yang mewakili yang kedua.n* adalah nol hingga tiga digit, mulai dari 0 hingga 999 , yang mewakili detik pecahan. |
Panjang karakter | 19 posisi minimal hingga 23 maksimum |
Ukuran penyimpanan | 8 byte |
Akurasi | Dibulatkan ke kenaikan , .000 , .003 atau .007 detik |
Nilai default | 1900-01-01 00:00:00 |
Kalender | Gregorian (termasuk rentang tahun lengkap) |
Presisi kedua pecahan yang ditentukan pengguna | No |
Sadar dan pelestarian offset zona waktu | No |
Kesadaran musim panas | No |
Format literal string yang didukung untuk tanggalwaktu
Tabel berikut mencantumkan format literal string yang didukung untuk tanggalwaktu. Kecuali untuk ODBC, literal string tanggalwaktu berada dalam tanda kutip tunggal ('
), misalnya, 'string_literaL'
. Jika lingkungan tidak us_english
, string harfiah harus dalam format N'string_literaL'
Unicode .
Format numerik
Anda dapat menentukan data tanggal dengan bulan numerik yang ditentukan. Misalnya, 5/20/97
mewakili hari kedua puluh Mei 1997. Saat Anda menggunakan format tanggal numerik, tentukan bulan, hari, dan tahun dalam string yang menggunakan tanda garis miring (/
), tanda hubung (-
), atau titik (.
) sebagai pemisah. String ini harus muncul dalam formulir berikut:
<number separator number separator number [time] [time]>
Saat bahasa diatur ke us_english
, urutan default untuk tanggal adalah mdy
(bulan, hari, tahun). Anda dapat mengubah urutan tanggal dengan menggunakan pernyataan SET DATEFORMAT .
Pengaturan untuk SET DATEFORMAT
menentukan bagaimana nilai tanggal ditafsirkan. Jika urutan tidak cocok dengan pengaturan, nilai tidak ditafsirkan sebagai tanggal. Tanggal di luar urutan mungkin disalahartikan sebagai di luar rentang atau dengan nilai yang salah. Misalnya, 12/10/08
dapat ditafsirkan sebagai salah satu dari enam tanggal, tergantung pada pengaturan.DATEFORMAT
Empat bagian tahun ditafsirkan sebagai tahun.
Format tanggal | Pesanan |
---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
Format waktu |
---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
Format alfabet
Anda dapat menentukan data tanggal dengan bulan yang ditentukan sebagai nama bulan lengkap. Misalnya, April
, atau singkatan bulan dari Apr
, yang ditentukan dalam bahasa saat ini. Koma bersifat opsional dan kapitalisasi diabaikan.
Berikut adalah beberapa panduan untuk menggunakan format tanggal alfabet:
Sertakan data tanggal dan waktu dalam tanda kutip tunggal (
'
). Untuk bahasa selain bahasa Inggris, gunakanN''
.Karakter yang diapit dalam tanda kurung bersifat opsional.
Jika Anda hanya menentukan dua digit terakhir dalam setahun, nilai yang kurang dari dua digit terakhir dari nilai opsi konfigurasi cutoff dua digit tahun berada di abad yang sama dengan tahun cutoff. Nilai yang lebih besar dari atau sama dengan nilai opsi ini adalah pada abad yang datang sebelum tahun cutoff. Misalnya, jika cutoff dua digit tahun adalah
2050
(default),25
ditafsirkan sebagai2025
dan50
ditafsirkan sebagai1950
. Untuk menghindari ambiguitas, gunakan tahun empat digit.Jika hari hilang, hari pertama dalam sebulan disediakan.
SET DATEFORMAT
Pengaturan sesi tidak diterapkan saat Anda menentukan bulan dalam bentuk alfabet.
Alfabetis |
---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
Format ISO 8601
Untuk menggunakan format ISO 8601, Anda harus menentukan setiap elemen dalam format, termasuk T
, titik dua (:
), dan titik (.
) yang ditampilkan dalam format.
Tanda kurung menunjukkan bahwa pecahan komponen kedua bersifat opsional. Komponen waktu ditentukan dalam format 24 jam. T
menunjukkan awal bagian waktu dari nilai tanggalwaktu.
Keuntungan dalam menggunakan format ISO 8601 adalah bahwa ini adalah standar internasional dengan spesifikasi yang tidak ambigu. Selain itu, format ini tidak terpengaruh oleh SET DATEFORMAT
pengaturan atau ATUR BAHASA .
Contoh:
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Format yang tidak dipisahkan
Format ini mirip dengan format ISO 8601, kecuali tidak berisi pemisah tanggal.
Tidak dipisahkan |
---|
yyyyMMdd HH:mm:ss[.mmm] |
Format ODBC
ODBC API mendefinisikan urutan escape untuk mewakili nilai tanggal dan waktu, yang ODBC memanggil data tanda waktu. Format tanda waktu ODBC ini juga didukung oleh definisi bahasa OLE DB (DBGUID-SQL) yang didukung oleh penyedia Microsoft OLE DB untuk SQL Server. Aplikasi yang menggunakan API berbasis ADO, OLE DB, dan ODBC dapat menggunakan format tanda waktu ODBC ini untuk mewakili tanggal dan waktu.
Urutan escape tanda waktu ODBC adalah format: : { <literal_type> '<constant_value>' }
<literal_type>
menentukan jenis urutan escape. Tanda waktu memiliki tiga<literal_type>
penentu:d
= hanya tanggalt
= hanya waktuts
= tanda waktu (waktu + tanggal)
<constant_value>
adalah nilai urutan escape.<constant_value>
harus mengikuti format ini untuk masing-masing<literal_type>
:d
:yyyy-MM-dd
t
:hh:mm:ss[.fff]
ts
:yyyy-MM-dd HH:mm:ss[.fff]
ODBC |
---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
Pembulatan presisi kedua pecahan tanggalwaktu
nilai tanggalwaktu dibulatkan ke kenaikan .000
, , .003
atau .007
detik, seperti yang ditunjukkan dalam contoh berikut.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
Berikut set hasilnya.
Nilai yang ditentukan pengguna | Nilai tersimpan sistem |
---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
Kepatuhan ANSI dan ISO 8601
datetime tidak sesuai dengan ANSI atau ISO 8601.
Mengonversi data tanggal dan waktu
Saat Anda mengonversi ke jenis data tanggal dan waktu, Mesin Database menolak semua nilai yang tidak dapat dikenali sebagai tanggal atau waktu. Untuk informasi tentang menggunakan CAST
fungsi dan CONVERT
dengan data tanggal dan waktu, lihat CAST dan CONVERT.
Mengonversi jenis tanggal dan waktu lainnya ke tipe data tanggalwaktu
Bagian ini menjelaskan apa yang terjadi ketika jenis data tanggal dan waktu lainnya dikonversi ke jenis data tanggalwaktu .
Ketika konversi dari tanggal, tahun, bulan, dan hari disalin. Komponen waktu diatur ke 00:00:00.000
. Kode berikut menunjukkan hasil konversi nilai menjadi DATE
DATETIME
nilai.
DECLARE @date DATE = '12-21-16';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Berikut set hasilnya.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
Contoh sebelumnya menggunakan format tanggal tertentu wilayah (MM-DD-YY
).
DECLARE @date DATE = '12-21-16';
Anda harus memperbarui contoh agar sesuai dengan format untuk wilayah Anda.
Anda juga dapat menyelesaikan contoh dengan format tanggal yang sesuai dengan ISO 8601 (yyyy-MM-dd
). Contohnya:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Ketika konversi dari waktu(n), komponen waktu disalin, dan komponen tanggal diatur ke 1900-01-01
. Ketika presisi pecahan nilai waktu(n) lebih besar dari tiga digit, nilai dipotong agar pas. Contoh berikut menunjukkan hasil konversi nilai menjadi TIME(4)
DATETIME
nilai.
DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
Berikut set hasilnya.
@datetime @time
------------------------ --------------
1900-01-01 12:10:05.123 12:10:05.1237
Ketika konversi berasal dari smalldatetime, jam dan menit disalin. Detik dan detik pecahan diatur ke 0
. Kode berikut menunjukkan hasil konversi nilai menjadi SMALLDATETIME
DATETIME
nilai.
DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
Berikut set hasilnya.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 2016-12-01 12:32:00
Ketika konversi berasal dari datetimeoffset(n), komponen tanggal dan waktu disalin. Zona waktu terpotong. Ketika presisi pecahan dari nilai datetimeoffset(n) lebih besar dari tiga digit, nilai dipotong. Contoh berikut menunjukkan hasil konversi nilai menjadi DATETIMEOFFSET(4)
DATETIME
nilai.
DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
Berikut set hasilnya.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Saat konversi berasal dari datetime2(n), tanggal dan waktu disalin. Ketika presisi pecahan dari nilai datetime2(n) lebih besar dari tiga digit, nilai dipotong. Contoh berikut menunjukkan hasil konversi nilai menjadi DATETIME2(4)
DATETIME
nilai.
DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
Berikut set hasilnya.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
Contoh
Contoh berikut membandingkan hasil transmisi string dengan setiap jenis data tanggal dan waktu .
SELECT CAST('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
Berikut set hasilnya.
Jenis Data | Output |
---|---|
time |
12:35:29.1234567 |
date |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |