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 | DEKLARASIKAN @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" berikut ini. |
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 |
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, 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 hingga 9999999 yang mewakili detik pecahan. Di Informatica, detik pecahan akan dipotong ketika n > 3. |
Panjang karakter | 19 posisi minimum (YYYY-MM-DD hh:mm:ss ) hingga 27 maksimum (YYYY-MM-DD hh:mm:ss.00000000) |
Presisi, skala | 0 hingga 7 digit, dengan akurasi 100n. Presisi default adalah 7 digit. Di Microsoft Fabric, ini bisa menjadi 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 (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 datetime2, lihat tanggal (T-SQL) dan waktu (Transact-SQL).
ISO 8601 | Deskripsi |
---|---|
YYYY-MM-DDThh:mm:ss[.nnnnnnn] YYYY-MM-DDThh:mm:ss[.nnnnnnn] |
Format ini tidak terpengaruh 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 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, 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 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 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
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 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
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 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 datetime
datetime2
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 tanggalwaktu ke tanggalwaktu2 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 skenario perbandingan campuran antara jenis data datetime dan datetime2 ada. 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 muncul. 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 didefinisikan 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. |
TimeZONE saja | Nilai default disediakan. |
TANGGAL + WAKTU | Trivial |
DATE + TIMEZONE | Dilarang. |
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 |
---|---|
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 |