tanggal (SQL-transaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Menentukan tanggal dalam SQL Server.
deskripsi tanggal
| Properti | Nilai |
|---|---|
| Sintaks | date |
| Penggunaan | MENYATAKAN tanggal @MyDate CREATE TABLE Table1 ( Column1 date ) |
| Format literal string default (digunakan untuk klien tingkat bawah) |
YYYY-MM-DD Untuk informasi selengkapnya, lihat bagian "Kompatibilitas Mundur untuk Klien Tingkat Bawah" yang mengikuti. |
| Rentang | 0001-01-01 melalui 9999-12-31 (1582-10-15 melalui 9999-12-31 untuk Informatica) 1 Januari 1 CE (Era Umum) hingga 31 Desember 9999 CE (15 Oktober 1582 CE hingga 31 Desember 9999 CE untuk Informatica) |
| Rentang elemen | YYYY adalah empat digit dari 0001 hingga 9999 yang mewakili setahun. Untuk Informatica, YYYY dibatasi pada rentang 1582 hingga 9999. MM adalah dua digit dari 01 hingga 12 yang mewakili sebulan dalam tahun yang ditentukan. DD adalah dua digit dari 01 hingga 31, tergantung pada bulan tersebut, yang mewakili hari dalam bulan yang ditentukan. |
| Panjang karakter | 10 posisi |
| Presisi, skala | 10, 0 |
| Ukuran penyimpanan | 3 byte, diperbaiki |
| struktur Storage | 1, tanggal penyimpanan bilangan bulat 3-byte. |
| Akurasi | Satu hari |
| Nilai default | 1900-01-01 Nilai ini digunakan untuk bagian tanggal yang ditambahkan untuk konversi implisit dari waktu ke datetime2 atau datetimeoffset. |
| Kalender | Gregorian |
| Presisi kedua pecahan yang ditentukan pengguna | Tidak |
| Sadar dan pelestarian offset zona waktu | Tidak |
| Daylight saving aware | Tidak |
Format literal string yang didukung untuk tanggal
Tabel berikut ini memperlihatkan format literal string yang valid untuk jenis data tanggal .
| Numerik | Deskripsi |
|---|---|
| mdy [m]m/dd/[yy]yy [m]m-dd-[yy]yy [m]m.dd. [yy]yy myd mm/[yy]yy/dd mm-[yy]yyy/dd [m]m.[yy]yy.dd dmy dd/[m]m/[yy]yyy dd-[m]m-[yy]yy dd.[m]m.[yy]yy dym dd/[yy]yy/[m]m dd-[yy]yy-[m]m dd.[yy]yy. [m]m ymd [yy]yy/[m]m/dd [yy]yy-[m]m-dd [yy]yy-[m]m-dd |
[m]m, dd, dan [yy]yy mewakili bulan, hari, dan tahun dalam string dengan tanda garis miring (/), tanda hubung (-), atau titik (.) sebagai pemisah. Hanya empat atau dua digit tahun yang didukung. Gunakan empat digit tahun jika memungkinkan. Untuk menentukan bilangan bulat dari 0001 hingga 9999 yang mewakili tahun cutoff untuk menafsirkan tahun dua digit sebagai tahun empat digit, gunakan Opsi Konfigurasi Server cutoff dua digit tahun. Ingat! Untuk Informatica, YYYY dibatasi pada rentang 1582 hingga 9999. Tahun dua digit yang kurang dari atau sama dengan dua digit terakhir tahun cutoff berada di abad yang sama dengan tahun cutoff. Tahun dua digit lebih besar dari dua digit terakhir tahun cutoff adalah pada abad yang datang sebelum tahun cutoff. Misalnya, jika cutoff tahun dua digit adalah default 2049, tahun dua digit 49 ditafsirkan sebagai 2049 dan tahun 50 dua digit ditafsirkan sebagai 1950. Format tanggal default ditentukan oleh pengaturan bahasa saat ini. Anda dapat mengubah format tanggal dengan menggunakan pernyataan SET LANGUAGE dan SET DATEFORMAT . Format ydm tidak didukung untuk tanggal. |
| Abjad | Deskripsi |
|---|---|
| mon [dd][,] yyyy mon dd[,] [yy] mon yyyy [dd] [dd] mon[,] yyyy dd mon[,][yy]yy dd [yy]yy mon [dd] yyyy mon yyyy mon [dd] yyyy [dd] mon |
mon mewakili nama bulan penuh atau singkatan bulan yang diberikan dalam bahasa saat ini. Koma bersifat opsional dan kapitalisasi diabaikan. Untuk menghindari ambiguitas, gunakan empat digit tahun. Jika hari itu hilang, hari pertama dalam sebulan disediakan. |
| ISO 8601 | Deskripsi |
|---|---|
| YYYY-MM-DD YYYYMMDD |
Sama seperti standar SQL. Format ini adalah satu-satunya format yang didefinisikan sebagai standar internasional. |
| Tidak dipisahkan | Deskripsi |
|---|---|
| [yyy]yymmdd yyyy[mm][dd] |
Data tanggal dapat ditentukan dengan empat, enam, atau delapan digit. String enam atau delapan digit selalu ditafsirkan sebagai ymd. Bulan dan hari harus selalu dua digit. String empat digit ditafsirkan sebagai tahun. |
| ODBC | Deskripsi |
|---|---|
| { d 'yyyy-mm-dd' } | ODBC API spesifik. |
| Format XML W3C | Deskripsi |
|---|---|
| yyyy-mm-ddTZD | Didukung untuk penggunaan XML/SOAP. TZD adalah penunjuk zona waktu (Z atau +hh:mm atau -hh:mm): - hh:mm mewakili offset zona waktu. hh adalah dua digit, mulai dari 0 hingga 14, yang mewakili jumlah jam dalam offset zona waktu. - MM adalah dua digit, mulai dari 0 hingga 59, yang mewakili jumlah menit tambahan dalam offset zona waktu. - + (plus) atau - (minus) tanda wajib offset zona waktu. Tanda ini menunjukkan bahwa, untuk mendapatkan waktu setempat, offset zona waktu ditambahkan atau dikurangi dari waktu Waktu Universal Terkoordinasi (UTC). Rentang offset zona waktu yang valid adalah dari -14:00 hingga +14:00. |
Kepatuhan ANSI dan ISO 8601
tanggal sesuai dengan definisi standar ANSI SQL untuk kalender Gregorian: "CATATAN 85 - Jenis data tanggalwaktu akan memungkinkan tanggal dalam format Gregorian disimpan dalam rentang tanggal 0001-01-01 CE hingga 9999-12-31 CE."
Format literal string default, yang digunakan untuk klien tingkat bawah, sesuai dengan bentuk standar SQL yang didefinisikan sebagai YYYY-MM-DD. Format ini sama dengan definisi ISO 8601 untuk DATE.
Catatan
Untuk Informatica, kisaran dibatasi hingga 1582-10-15 (15 Oktober 1582 CE) hingga 9999-12-31 (31 Desember 9999 CE).
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 |
|---|---|---|---|---|---|
| waktu | 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 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 tanggal ke jenis tanggal dan waktu lainnya
Bagian ini menjelaskan apa yang terjadi saat Anda mengonversi jenis data tanggal ke jenis data tanggal dan waktu lainnya.
Ketika konversi adalah ke time(n), konversi gagal, dan pesan kesalahan 206 dimunculkan: "Jenis operand bentrok: tanggal tidak kompatibel dengan waktu".
Jika konversi ke tanggalwaktu, tanggal akan disalin. Kode berikut menunjukkan hasil konversi nilai menjadi datedatetime nilai.
DECLARE @date date= '12-10-25';
DECLARE @datetime datetime= @date;
SELECT @date AS '@date', @datetime AS '@datetime';
--Result
--@date @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)
Ketika konversi adalah smalldatetime, nilai tanggal berada dalam rentang smalldatetime, komponen tanggal disalin, dan komponen waktu diatur ke 00:00:00.000. Ketika nilai tanggal berada di luar rentang nilai smalldatetime , pesan kesalahan 242 dimunculkan: "Konversi jenis data tanggal ke jenis data smalldatetime menghasilkan nilai di luar rentang."; dan nilai smalldatetime diatur ke NULL. Kode berikut menunjukkan hasil konversi nilai menjadi datesmalldatetime nilai.
DECLARE @date date= '1912-10-25';
DECLARE @smalldatetime smalldatetime = @date;
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
--Result
--@date @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)
Untuk konversi ke datetimeoffset(n), tanggal disalin, dan waktu diatur ke 00:00.00000000 +00:00. Kode berikut menunjukkan hasil konversi nilai menjadi datedatetimeoffset(3) nilai.
DECLARE @date date = '1912-10-25';
DECLARE @datetimeoffset datetimeoffset(3) = @date;
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
--Result
--@date @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00.000 +00:00
--
--(1 row(s) affected)
Ketika konversi ke datetime2(n), komponen tanggal disalin, dan komponen waktu diatur ke 00:00.000000. Kode berikut menunjukkan hasil konversi nilai menjadi datedatetime2(3) nilai.
DECLARE @date date = '1912-10-25'
DECLARE @datetime2 datetime2(3) = @date;
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
--Result
--@date @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.000
--
--(1 row(s) affected)
Mengonversi literal string menjadi tanggal
Konversi dari literal string ke jenis tanggal dan waktu diizinkan jika semua bagian string dalam format yang valid. Jika tidak, kesalahan runtime dimunculkan. 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 tanggal .
| String input literal | date |
|---|---|
| TANGGAL ODBC | Literal string ODBC dipetakan ke jenis data tanggalwaktu . Setiap operasi penetapan dari ODBC DATETIME harfiah ke dalam jenis tanggal menyebabkan konversi implisit antara tanggalwaktu dan jenis yang ditentukan aturan konversi. |
| WAKTU ODBC | Lihat aturan TANGGAL ODBC sebelumnya. |
| TANGGALWAKTU ODBC | Lihat aturan TANGGAL ODBC sebelumnya. |
| HANYA TANGGAL | Sepele |
| Hanya WAKTU | Nilai default disediakan. |
| ZONA WAKTU saja | Nilai default disediakan. |
| TANGGAL + WAKTU | Bagian DATE dari string input digunakan. |
| TANGGAL + ZONA WAKTU | Tidak diperbolehkan. |
| TIME + TIMEZONE | Nilai default disediakan. |
| TANGGAL + WAKTU + ZONA WAKTU | Bagian DATE dari 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 |
|---|---|
| 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 |
Pertama kali diperkenalkan pada SQL Server 2008.