datetime2 (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Menentukan tanggal yang dikombinasikan dengan waktu hari yang didasarkan pada jam 24 jam. datetime2 dapat dianggap sebagai ekstensi 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 | DECLARE @MyDatetime2 datetime2(7); CREATE TABLE Table1 (Column1 datetime2(7)); |
Format literal string default (digunakan untuk klien tingkat bawah) |
yyyy-MM-dd HH:mm:ss[.nnnnnnn] Untuk informasi selengkapnya, lihat Kompatibilitas mundur untuk klien tingkat bawah nanti di artikel ini. |
Rentang tanggal | 0001-01-01 melalui 9999-12-31 Januari 1, 1 CE hingga Desember 31, 9999 CE |
Rentang waktu | 00:00:00 melalui 23:59:59.9999999 |
Rentang offset zona waktu | Tidak |
Rentang elemen | yyyy adalah angka empat digit, mulai dari 0001 melalui 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, yang mewakili hari dari 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 ke 9999999 , yang mewakili detik pecahan. Di Informatica, detik pecahan dipotong ketika n kurang dari 3 . |
Panjang karakter | 19 posisi minimum (yyyy-MM-dd HH:mm:ss ) hingga 27 maksimum (yyyy-MM-dd HH:mm:ss.0000000 ) |
Presisi, skala | 0 hingga 7 digit, dengan akurasi 100 nanodetik (100 ns). Presisi default adalah 7 digit. Di Microsoft Fabric, presisi ini dapat berupa bilangan bulat dari 0 hingga 6, tanpa default. Presisi harus ditentukan dalam Microsoft Fabric. |
Ukuran penyimpanan 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 |
Calendar | Gregorian |
Presisi kedua pecahan yang ditentukan pengguna | Ya |
Sadar dan pelestarian offset zona waktu | No |
Kesadaran musim panas | No |
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 dilemparkan ke nilai varbinary , byte tambahan ditambahkan ke nilai varbinary untuk menyimpan presisi.
Untuk metadata jenis data, lihat sys.systypes atau TYPEPROPERTY. Presisi dan skala bervariasi untuk beberapa jenis data tanggal dan waktu. Untuk mendapatkan presisi dan skala untuk kolom, lihat COLUMNPROPERTY, COL_LENGTH, atau sys.columns.
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 datetime2, lihat tanggal dan waktu.
ISO 8601 | Deskripsi |
---|---|
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] |
Format ini tidak dipengaruhi oleh SET LANGUAGE pengaturan lokal sesi dan SET DATEFORMAT . T , titik dua (: ), dan titik (. ) disertakan dalam string literal, misalnya 2024-05-02T19:58:47.1234567 . |
ODBC | Deskripsi |
---|---|
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } |
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 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 |
---|---|---|---|---|---|
time | 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, Mesin Database 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
Mengonversi jenis tanggal dan waktu lainnya ke tipe 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.0000000. Kode berikut menunjukkan hasil konversi nilai menjadi date
datetime2
nilai.
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
Berikut set hasilnya.
@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 waktu(7) menjadi nilai datetime2 .
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
Berikut set hasilnya.
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
Ketika konversi berasal dari smalldatetime, jam dan menit disalin. Detik dan detik pecahan diatur ke 0. Kode berikut menunjukkan hasil konversi nilai menjadi smalldatetime
datetime2
nilai.
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
Berikut set hasilnya.
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
Ketika konversi berasal dari datetimeoffset(n), komponen tanggal dan waktu disalin. Zona waktu terpotong. Contoh berikut menunjukkan hasil konversi nilai menjadi datetimeoffset(7)
datetime2
nilai.
DECLARE @datetimeoffset AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;
SELECT @datetime2 AS '@datetime2',
@datetimeoffset AS '@datetimeoffset';
Berikut set hasilnya.
@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 datetime
datetime2
nilai.
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
Berikut set hasilnya.
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Transmisikan secara eksplisit ke datetime2 saat menggunakan datetime
Di bawah tingkat kompatibilitas database 130 dan lebih besar, 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 sebelumnya. Gunakan transmisi eksplisit ke jenis data datetime2 setiap kali skenario perbandingan campuran antara jenis data datetime dan datetime2 ada. Untuk informasi selengkapnya, lihat Peningkatan SQL Server dan Azure SQL Database dalam menangani beberapa jenis data dan operasi yang tidak biasa.
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 muncul. Konversi implisit atau konversi eksplisit yang tidak menentukan gaya, dari jenis tanggal dan waktu hingga literal string 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) |
---|---|
ODBC DATE |
Literal string ODBC dipetakan ke jenis data tanggalwaktu . Setiap operasi penugasan dari ODBC DATETIME literal ke dalam jenis datetime2 menyebabkan konversi implisit antara tanggalwaktu dan jenis ini seperti yang didefinisikan oleh aturan konversi. |
ODBC TIME |
Lihat aturan sebelumnya ODBC DATE . |
ODBC DATETIME |
Lihat aturan sebelumnya ODBC DATE . |
DATE hanya |
Bagian TIME default ke 00:00:00 . |
TIME hanya |
Bagian DATE default ke 1900-01-01 . |
TIMEZONE hanya |
Nilai default disediakan. |
DATE + TIME |
Sepele. |
DATE + TIMEZONE |
Dilarang. |
TIME + TIMEZONE |
Bagian DATE default ke 1900-1-1. TIMEZONE input diabaikan. |
DATE + TIME + TIMEZONE |
Lokal DATETIME 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 set hasilnya.
Jenis Data | Output |
---|---|
time | 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 |