datetime2 (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse 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 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, 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
Kalender Gregorian
Presisi kedua pecahan yang ditentukan pengguna Ya
Sadar dan pelestarian offset zona waktu Tidak
Kesadaran musim panas 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 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 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

Ketika konversi berasal dari smalldatetime, jam dan menit 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 

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 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 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 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 Hasil
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

Baca juga

CAST dan CONVERT (Transact-SQL)