datetime (Transact-SQL)

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Menentukan tanggal yang dikombinasikan dengan waktu hari dengan detik pecahan yang didasarkan pada jam 24 jam.

Catatan

Gunakan jenis data waktu, tanggal, datetime2 , dan datetimeoffset untuk pekerjaan baru. Jenis-jenis ini selaras dengan Standar SQL. Mereka lebih portabel. time, datetime2 , dan datetimeoffset memberikan presisi lebih detik. datetimeoffset menyediakan dukungan zona waktu untuk aplikasi yang disebarkan secara global.

Deskripsi

Properti Nilai
Sintaks datetime
Penggunaan MENDEKLARASIKAN tanggalwaktu @MyDatetime

CREATE TABLE Table1 ( Kolom1 datetime )
Format literal string default

(digunakan untuk klien tingkat bawah)
Tidak berlaku
Rentang tanggal 1 Januari 1753, hingga 31 Desember 9999
Rentang waktu 00:00:00 hingga 23:59:59.997
Rentang offset zona waktu Tidak ada
Rentang elemen YYYY adalah empat digit dari 1753 hingga 9999 yang mewakili setahun.

MM adalah dua digit, mulai dari 01 hingga 12, yang mewakili sebulan dalam tahun yang ditentukan.

DD adalah dua digit, mulai dari 01 hingga 31 tergantung pada bulan tersebut, yang mewakili hari dalam bulan yang ditentukan.

hh adalah dua digit, mulai dari 00 hingga 23, yang mewakili jam.

mm adalah dua digit, mulai dari 00 hingga 59, yang mewakili menit.

ss adalah dua digit, mulai dari 00 hingga 59, yang mewakili yang kedua.

n* adalah nol hingga tiga digit, mulai dari 0 hingga 999, yang mewakili detik pecahan.
Panjang karakter 19 posisi minimal hingga 23 maksimum
Ukuran penyimpanan 8 byte
Akurasi Dibulatkan ke kenaikan .000, .003, atau .007 detik
Nilai default 1900-01-01 00:00:00
Kalender Gregorian (Termasuk rentang lengkap tahun.)
Presisi kedua pecahan yang ditentukan pengguna Tidak
Sadar dan pelestarian offset zona waktu Tidak
Daylight saving aware Tidak

Format literal string yang didukung untuk tanggalwaktu

Tabel berikut mencantumkan format literal string yang didukung untuk tanggalwaktu. Kecuali untuk ODBC, literal string tanggalwaktu berada dalam tanda kutip tunggal ('), misalnya, 'string_literaL'. Jika lingkungan tidak us_english, literal string harus dalam format N'string_literaL'.

Numerik Deskripsi
Format tanggal:

[0]4/15/[19]96 -- (mdy)

[0]4-15-[19]96 -- (mdy)

[0]4.15. [19]96 -- (mdy)

[0]4/[19]96/15 -- (myd)

15/[0]4/[19]96 -- (dmy)

15/[19]96/[0]4 -- (dym)

[19]96/15/[0]4 -- (ydm)

[19]96/[0]4/15 -- (ymd)

Format waktu:

14:30

14:30[:20:999]

14:30[:20.9]

04.00

16.00
Anda dapat menentukan data tanggal dengan bulan numerik yang ditentukan. Misalnya, 20/5/97 mewakili hari kedua puluh Mei 1997. Saat Anda menggunakan format tanggal numerik, tentukan bulan, hari, dan tahun dalam string yang menggunakan tanda garis miring (/), tanda hubung (-), atau titik (.) sebagai pemisah. String ini harus muncul dalam formulir berikut:

nomor pemisah nomor pemisah nomor [waktu] [waktu]



Saat bahasa diatur ke us_english, urutan default untuk tanggal tersebut adalah mdy. Anda dapat mengubah urutan tanggal dengan menggunakan pernyataan SET DATEFORMAT .

Pengaturan untuk SET DATEFORMAT menentukan bagaimana nilai tanggal ditafsirkan. Jika urutan tidak cocok dengan pengaturan, nilai tidak ditafsirkan sebagai tanggal. Tanggal yang tidak berurutan dapat disalahartikan sebagai di luar rentang atau dengan nilai yang salah. Misalnya, 10/12/08 dapat ditafsirkan sebagai salah satu dari enam tanggal, tergantung pada pengaturan DATEFORMAT. Empat bagian tahun ditafsirkan sebagai tahun.
Abjad Deskripsi
Apr[il] [15][,] 1996

Apr[il] 15[,] [19]96

Apr[il] 1996 [15]

[15] Apr[il][,] 1996

15 Apr[il][,][19]96

15 [19]96 apr[il]

[15] 1996 apr[il]

1996 APR[IL] [15]

1996 [15] APR[IL]
Anda dapat menentukan data tanggal dengan bulan yang ditentukan sebagai nama bulan penuh. Misalnya, April atau bulan singkatan apr yang ditentukan dalam bahasa saat ini; koma bersifat opsional dan kapitalisasi diabaikan.

Berikut adalah beberapa panduan untuk menggunakan format tanggal alfabet:

1) Sertakan data tanggal dan waktu dalam tanda kutip tunggal ('). Untuk bahasa selain bahasa Inggris, gunakan N'

2) Karakter yang diapit dalam tanda kurung bersifat opsional.

3) Jika Anda hanya menentukan dua digit terakhir dalam setahun, nilai yang kurang dari dua digit terakhir dari nilai opsi konfigurasi Konfigurasi Server cutoff dua digit tahun berada di abad yang sama dengan tahun cutoff. Nilai yang lebih besar dari atau sama dengan nilai opsi ini adalah pada abad yang datang sebelum tahun cutoff. Misalnya, jika cutoff dua digit tahun adalah 2050 (default), 25 ditafsirkan sebagai 2025 dan 50 ditafsirkan sebagai 1950. Untuk menghindari ambiguitas, gunakan empat digit tahun.

4) Jika hari hilang, hari pertama dalam sebulan disediakan.



Pengaturan sesi SET DATEFORMAT tidak diterapkan saat Anda menentukan bulan dalam bentuk alfabet.
ISO 8601 Deskripsi
YYYY-MM-DDThh:mm:ss[.mmm]

YYYYMMDD[ hh:mm:ss[.mmm]]
Contoh:

1) 2004-05-23T14:25:10

2) 2004-05-23T14:25:10.487



Untuk menggunakan format ISO 8601, Anda harus menentukan setiap elemen dalam format, termasuk T, titik dua (:), dan titik (.) yang ditampilkan dalam format.

Tanda kurung menunjukkan bahwa pecahan komponen kedua bersifat opsional. Komponen waktu ditentukan dalam format 24 jam.

T menunjukkan awal bagian waktu dari nilai tanggalwaktu .

Keuntungan dalam menggunakan format ISO 8601 adalah bahwa ini adalah standar internasional dengan spesifikasi yang tidak ambigu. Selain itu, format ini tidak terpengaruh oleh pengaturan SET DATEFORMAT atau SET LANGUAGE .
Tidak dipisahkan Deskripsi
YYYYMMDD hh:mm:ss[.mmm]
ODBC Deskripsi
{ ts '1998-05-02 01:23:56.123' }

{ d '1990-10-02' }

{ t '13:33:41' }
ODBC API mendefinisikan urutan escape untuk mewakili nilai tanggal dan waktu, yang ODBC memanggil data tanda waktu. Format tanda waktu ODBC ini juga didukung oleh definisi bahasa OLE DB (DBGUID-SQL) yang didukung oleh penyedia Microsoft OLE DB untuk SQL Server. Aplikasi yang menggunakan API berbasis ADO, OLE DB, dan ODBC dapat menggunakan format tanda waktu ODBC ini untuk mewakili tanggal dan waktu.

Urutan escape tanda waktu ODBC berformat: { literal_type 'constant_value' }:



- literal_type menentukan jenis urutan escape. Tanda waktu memiliki tiga penentu literal_type :
1) d = hanya tanggal
2) t = hanya waktu
3) ts = tanda waktu (waktu + tanggal)



- 'constant_value' adalah nilai urutan escape. constant_value harus mengikuti format ini untuk setiap literal_type.
d : yyyy-mm-dd
t : hh:mm:ss[.fff]
ts : yyyy-mm-dd hh:mm:ss[.fff]

Pembulatan presisi kedua pecahan tanggalwaktu

nilai tanggalwaktu dibulatkan ke kenaikan .000, .003, atau .007 detik, seperti yang diperlihatkan dalam tabel berikut.

Nilai yang ditentukan pengguna Nilai tersimpan sistem
01/01/98 23:59:59.999 1998-01-02 00:00:00.000
01/01/98 23:59:59.995

01/01/98 23:59:59.996

01/01/98 23:59:59.997

01/01/98 23:59:59.998
1998-01-01 23:59:59.997
01/01/98 23:59:59.992

01/01/98 23:59:59.993

01/01/98 23:59:59.994
1998-01-01 23:59:59.993
01/01/98 23:59:59.990

01/01/98 23:59:59.991
1998-01-01 23:59:59.990

Kepatuhan ANSI dan ISO 8601

datetime tidak sesuai dengan ANSI atau ISO 8601.

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 tanggalwaktu

Bagian ini menjelaskan apa yang terjadi ketika jenis data tanggal dan waktu lainnya dikonversi ke jenis data tanggalwaktu .

Ketika konversi dari tanggal, tahun, bulan, dan hari disalin. Komponen waktu diatur ke 00:00:00.000. Kode berikut menunjukkan hasil konversi nilai menjadi datedatetime nilai.

DECLARE @date date = '12-21-16';  
DECLARE @datetime datetime = @date;  
  
SELECT @datetime AS '@datetime', @date AS '@date';  
  
--Result  
--@datetime               @date  
------------------------- ----------  
--2016-12-21 00:00:00.000 2016-12-21  

Catatan

Contoh di atas menggunakan format tanggal tertentu wilayah (MM-DD-YY).

DECLARE @date date = '12-21-16';

Anda dapat memperbarui contoh agar sesuai dengan format untuk wilayah Anda.

Anda juga dapat menyelesaikan contoh dengan format tanggal yang sesuai dengan ISO 8601 (YYYY-MM-DD). Contohnya:

DECLARE @date date = '2016-12-21';  
DECLARE @datetime datetime = @date;  

SELECT @datetime AS '@datetime', @date AS '@date';  

Ketika konversi dari time(n), komponen waktu disalin, dan komponen tanggal diatur ke '1900-01-01'. Ketika presisi pecahan nilai time(n) lebih besar dari tiga digit, nilai akan dipotong agar pas. Contoh berikut menunjukkan hasil konversi nilai menjadi time(4)datetime nilai.

DECLARE @time time(4) = '12:10:05.1237';  
DECLARE @datetime datetime = @time;  
  
SELECT @datetime AS '@datetime', @time AS '@time';  
  
--Result  
--@datetime               @time  
------------------------- -------------  
--1900-01-01 12:10:05.123 12:10:05.1237  

Ketika konversi berasal dari smalldatetime, jam dan menit disalin. Detik dan detik pecahan diatur ke 0. Kode berikut menunjukkan hasil konversi nilai menjadi smalldatetimedatetime nilai.

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';  
DECLARE @datetime datetime = @smalldatetime;  
  
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@datetime               @smalldatetime  
------------------------- -----------------------  
--2016-12-01 12:32:00.000 2016-12-01 12:32:00  

Ketika konversi berasal dari datetimeoffset(n), komponen tanggal dan waktu disalin. Zona waktu terpotong. Ketika presisi pecahan dari nilai datetimeoffset(n) lebih besar dari tiga digit, nilai akan dipotong. Contoh berikut menunjukkan hasil konversi nilai menjadi datetimeoffset(4)datetime nilai.

DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0';  
DECLARE @datetime datetime = @datetimeoffset;  
  
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';  
  
--Result  
--@datetime               @datetimeoffset  
------------------------- ------------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0   

Ketika konversi berasal dari datetime2(n), tanggal dan waktu disalin. Ketika presisi pecahan dari nilai datetime2(n) lebih besar dari tiga digit, nilai akan dipotong. Contoh berikut menunjukkan hasil konversi nilai menjadi datetime2(4)datetime nilai.

DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';  
DECLARE @datetime datetime = @datetime2;  
  
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';  
  
--Result  
--@datetime               @datetime2  
------------------------- ------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237  

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

Lihat juga

CAST dan CONVERT (Transact-SQL)