Bagikan melalui


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