datetime2 (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Menentukan tanggal yang digabungkan dengan waktu hari yang didasarkan pada jam 24 jam. datetime2 dapat dianggap sebagai perpanjangan dari jenis tanggalwaktu yang ada yang memiliki rentang tanggal yang lebih besar, presisi pecahan default yang lebih besar, dan presisi opsional yang ditentukan pengguna.
deskripsi datetime2
| Properti | Nilai |
|---|---|
| Sintaks | datetime2 [ (presisi detik pecahan) ] |
| Penggunaan | NYATAKAN @MyDatetime2 datetime2(7) CREATE TABLE Table1 ( Column1 datetime2(7) ) |
| Format literal string default (digunakan untuk klien tingkat bawah) |
YYYY-MM-DD hh:mm:ss[.fractional seconds] Untuk informasi selengkapnya, lihat bagian "Kompatibilitas Mundur untuk Klien Tingkat Bawah" yang mengikuti. |
| Rentang tanggal | 0001-01-01 hingga 9999-12-31 Januari 1,1 CE hingga Desember 31, 9999 CE |
| Rentang waktu | 00:00:00 hingga 23:59:59.99999999 |
| Rentang offset zona waktu | Tidak ada |
| Rentang elemen | YYYY adalah angka empat digit, mulai dari 0001 hingga 9999, yang mewakili setahun. MM adalah angka dua digit, mulai dari 01 hingga 12, yang mewakili sebulan dalam tahun yang ditentukan. DD adalah angka dua digit, mulai dari 01 hingga 31 tergantung pada bulan tersebut, yang mewakili hari dalam bulan yang ditentukan. hh adalah angka dua digit, mulai dari 00 hingga 23, yang mewakili jam. mm adalah angka dua digit, mulai dari 00 hingga 59, yang mewakili menit. ss adalah angka dua digit, mulai dari 00 hingga 59, yang mewakili angka kedua. n* adalah angka nol hingga tujuh digit dari 0 hingga 9999999 yang mewakili detik pecahan. Di Informatica, detik pecahan akan terpotok ketika n > 3. |
| Panjang karakter | Minimal 19 posisi (YYYY-MM-DD hh:mm:ss ) hingga maksimum 27 (YYYY-MM-DD hh:mm:ss.00000000) |
| Presisi, skala | 0 hingga 7 digit, dengan akurasi 100ns. Presisi default adalah 7 digit. |
| ukuran Storage 1 | 6 byte untuk presisi kurang dari 3. 7 byte untuk presisi 3 atau 4. Semua presisi lainnya membutuhkan 8 byte. 2 |
| Akurasi | 100 nanodetik |
| Nilai default | 1900-01-01 00:00:00 |
| Kalender | Gregorian |
| Presisi kedua pecahan yang ditentukan pengguna | Ya |
| Sadar dan pelestarian offset zona waktu | Tidak |
| Daylight saving aware | Tidak |
1 Nilai yang disediakan adalah untuk rowstore yang tidak dikompresi. Penggunaan kompresi data atau penyimpan kolom dapat mengubah ukuran penyimpanan untuk setiap presisi. Selain itu, ukuran penyimpanan pada disk dan dalam memori mungkin berbeda. Misalnya, nilai datetime2 selalu memerlukan 8 byte dalam memori saat mode batch digunakan.
2 Ketika nilai datetime2 ditransmisikan ke nilai varbinary , byte tambahan ditambahkan ke nilai varbinary untuk menyimpan presisi.
Untuk metadata jenis data, lihat sys.systypes (Transact-SQL) atau TYPEPROPERTY (Transact-SQL). Presisi dan skala bervariasi untuk beberapa jenis data tanggal dan waktu. Untuk mendapatkan presisi dan skala untuk kolom, lihat COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL), atau sys.columns (Transact-SQL).
Format literal string yang didukung untuk datetime2
Tabel berikut mencantumkan format literal string ISO 8601 dan ODBC yang didukung untuk datetime2. Untuk informasi tentang format alfabet, numerik, tidak dipisahkan, dan waktu untuk bagian tanggal dan waktu tanggal dan waktu datetime2, lihat tanggal (SQL-transaksi) dan waktu (SQL Bertransaksi).
| ISO 8601 | Deskripsi |
|---|---|
| YYYY-MM-DDThh:mm:ss[.nnnnnnn] YYYY-MM-DDThh:mm:ss[.nnnnnnn] |
Format ini tidak dipengaruhi oleh pengaturan lokal sesi SET LANGUAGE dan SET DATEFORMAT. T, titik dua (:) dan periode (.) disertakan dalam string literal, misalnya '2007-05-02T19:58:47.1234567'. |
| ODBC | Deskripsi |
|---|---|
| { ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' } | ODBC API spesifik: Jumlah digit di sebelah kanan titik desimal, yang mewakili detik pecahan, dapat ditentukan dari 0 hingga 7 (100 nanodetik). |
Kepatuhan ANSI dan ISO 8601
Kepatuhan ANSI dan ISO 8601 dari tanggal dan waktu berlaku untuk datetime2.
Kompatibilitas Mundur untuk Klien Tingkat Bawah
Beberapa klien tingkat bawah tidak mendukung jenis data waktu, tanggal, tanggalwaktu2 , dan datetimeoffset . Tabel berikut menunjukkan pemetaan jenis antara instans tingkat atas SQL Server dan klien tingkat bawah.
| Tipe data SQL Server | Format literal string default diteruskan ke klien tingkat bawah | ODBC tingkat bawah | OLEDB tingkat bawah | JDBC tingkat bawah | SQLCLIENT tingkat bawah |
|---|---|---|---|---|---|
| waktu | hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
| date | YYYY-MM-DD | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
| datetime2 | YYYY-MM-DD hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
| datetimeoffset | YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
Mengonversi data tanggal dan waktu
Saat Anda mengonversi ke jenis data tanggal dan waktu, SQL Server menolak semua nilai yang tidak dapat dikenali sebagai tanggal atau waktu. Untuk informasi tentang menggunakan fungsi CAST dan CONVERT dengan data tanggal dan waktu, lihat CAST dan CONVERT (Transact-SQL)
Mengonversi jenis tanggal dan waktu lainnya ke jenis data datetime2
Bagian ini menjelaskan apa yang terjadi ketika jenis data tanggal dan waktu lainnya dikonversi ke jenis data datetime2 .
Ketika konversi dari tanggal, tahun, bulan, dan hari disalin. Komponen waktu diatur ke 00:00:00.00000000. Kode berikut menunjukkan hasil konversi nilai menjadi datedatetime2 nilai.
DECLARE @date date = '12-21-16';
DECLARE @datetime2 datetime2 = @date;
SELECT @datetime2 AS '@datetime2', @date AS '@date';
--Result
--@datetime2 @date
----------------------------- ----------
--2016-12-21 00:00:00.0000000 2016-12-21
Ketika konversi dari waktu(n), komponen waktu disalin, dan komponen tanggal diatur ke '1900-01-01'. Contoh berikut menunjukkan hasil konversi nilai menjadi time(7)datetime2 nilai.
DECLARE @time time(7) = '12:10:16.1234567';
DECLARE @datetime2 datetime2 = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
--Result
--@datetime2 @time
----------------------------- ----------------
--1900-01-01 12:10:16.1234567 12:10:16.1234567
Saat konversi berasal dari smalldatetime, jam dan menit akan disalin. Detik dan detik pecahan diatur ke 0. Kode berikut menunjukkan hasil konversi nilai menjadi smalldatetimedatetime2 nilai.
DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime2 datetime2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime';
--Result
--@datetime2 @smalldatetime
----------------------------- -----------------------
--2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
Saat konversi berasal dari datetimeoffset(n), komponen tanggal dan waktu disalin. Zona waktu terpotok. Contoh berikut menunjukkan hasil konversi nilai menjadi datetimeoffset(7)datetime2 nilai.
DECLARE @datetimeoffset datetimeoffset(7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 datetime2 = @datetimeoffset;
SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset';
--Result
--@datetime2 @datetimeoffset
----------------------------- ----------------------------------
--2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
Saat konversi berasal dari tanggalwaktu, tanggal dan waktu akan disalin. Presisi pecahan diperpanjang hingga 7 digit. Contoh berikut menunjukkan hasil konversi nilai menjadi datetimedatetime2 nilai.
DECLARE @datetime datetime = '2016-10-23 12:45:37.333';
DECLARE @datetime2 datetime2 = @datetime;
SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
--Result
--@datetime2 @datetime
------------------------- ---------------------------
--2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Catatan
Di bawah tingkat kompatibilitas database 130, konversi implisit dari jenis data datetime ke datetime2 menunjukkan peningkatan akurasi dengan memperhitungkan milidetik pecahan, menghasilkan nilai yang dikonversi yang berbeda, seperti yang terlihat dalam contoh di atas. Gunakan transmisi eksplisit ke jenis data datetime2 setiap kali ada skenario perbandingan campuran antara jenis data datetime dan datetime2. Untuk informasi selengkapnya, lihat Artikel Dukungan Microsoft ini.
Mengonversi Literal String menjadi datetime2
Konversi dari literal string ke jenis tanggal dan waktu diizinkan jika semua bagian string dalam format yang valid. Jika tidak, kesalahan runtime dimunculkan. Konversi implisit atau konversi eksplisit yang tidak menentukan gaya, dari jenis tanggal dan waktu hingga literal string akan berada dalam format default sesi saat ini. Tabel berikut ini memperlihatkan aturan untuk mengonversi string literal ke jenis data datetime2 .
| String input literal | datetime2(n) |
|---|---|
| TANGGAL ODBC | Literal string ODBC dipetakan ke jenis data tanggalwaktu . Setiap operasi penugasan dari literal ODBC DATETIME menjadi jenis datetime2 akan menyebabkan konversi implisit antara tanggalwaktu dan jenis ini seperti yang ditentukan oleh aturan konversi. |
| WAKTU ODBC | Lihat aturan TANGGAL ODBC sebelumnya. |
| TANGGALWAKTU ODBC | Lihat aturan TANGGAL ODBC sebelumnya. |
| HANYA TANGGAL | Bagian TIME default ke 00:00:00. |
| Hanya WAKTU | Bagian DATE default ke 1900-1-1. |
| ZONA WAKTU saja | Nilai default disediakan. |
| TANGGAL + WAKTU | Sepele |
| TANGGAL + ZONA WAKTU | Tidak diperbolehkan. |
| TIME + TIMEZONE | Bagian DATE default ke 1900-1-1. Input TIMEZONE diabaikan. |
| TANGGAL + WAKTU + ZONA WAKTU | DATETIME lokal akan digunakan. |
Contoh
Contoh berikut membandingkan hasil transmisi string dengan setiap jenis data tanggal dan waktu .
SELECT
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'
,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS
'smalldatetime'
,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS
'datetime2'
,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS
'datetimeoffset';
Berikut adalah hasil yang ditetapkan.
| Jenis data | Output |
|---|---|
| waktu | 12:35:29.1234567 |
| date | 2007-05-08 |
| smalldatetime | 2007-05-08 12:35:00 |
| datetime | 2007-05-08 12:35:29.123 |
| datetime2 | 2007-05-08 12:35:29.1234567 |
| datetimeoffset | 2007-05-08 12:35:29.1234567 +12:15 |