Bagikan melalui


tanggal (Transact-SQL)

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) titik akhir analitik SQL di Microsoft Fabric Warehouse dalam database Microsoft Fabric SQL di Microsoft Fabric

Menentukan tanggal di SQL Server. Jenis data tanggal diperkenalkan di SQL Server 2008 (10.0.x).

deskripsi tanggal

Properti Nilai
Sintaks DATE
Penggunaan DECLARE @MyDate DATE

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.
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 ke 9999 yang mewakili setahun. Informatica membatasi yyyy rentang 1582 ke 9999.

MM adalah dua digit dari 01 ke 12 yang mewakili sebulan dalam tahun yang ditentukan.

dd adalah dua digit dari 01 ke 31, tergantung pada bulan, yang mewakili hari dari bulan yang ditentukan.
Panjang karakter 10 posisi
Presisi, skala 10, 0
Ukuran penyimpanan 3 byte, tetap
Struktur penyimpanan satu 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.
Calendar Gregorian
Presisi kedua pecahan yang ditentukan pengguna No
Sadar dan pelestarian offset zona waktu No
Kesadaran musim panas No

Format literal string yang didukung untuk tanggal

Daftar berikut menunjukkan format literal string yang valid untuk jenis data tanggal .

[m]m, dd, dan [yy]yy mewakili bulan, hari, dan tahun dalam string dengan tanda garis miring (/), tanda hubung (-), atau titik (.) sebagai pemisah.

Hanya tahun empat digit atau dua digit yang didukung. Gunakan empat digit tahun jika memungkinkan. Untuk menentukan bilangan bulat dari 0001 ke 9999 yang mewakili tahun cutoff untuk menafsirkan tahun dua digit sebagai tahun empat digit, gunakan opsi konfigurasi server cutoff dua digit tahun.

Untuk Informatica, yyyy terbatas pada rentang 1582 ke 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 , tahun 49 dua digit ditafsirkan sebagai 2049 dan tahun 50 dua digit ditafsirkan sebagai 1950.2049

Pengaturan bahasa saat ini menentukan format tanggal default. Anda dapat mengubah format tanggal dengan menggunakan pernyataan SET LANGUAGE dan SET DATEFORMAT .

ydm Format tidak didukung untuk tanggal.

Format literal string untuk bulan-hari-tahun

SET DATEFORMAT mdy;
  • [m]m/dd/[yy]yy
  • [m]m-dd-[yy]yy

Format literal string untuk bulan-tahun-hari

SET DATEFORMAT myd;
  • [m]m/[yy]yy/dd
  • [m]m-[yy]yy-dd
  • [m]m.[yy]yy.dd

Format literal string untuk hari-bulan-tahun

SET DATEFORMAT dmy;
  • dd/[m]m/[yy]yy
  • dd-[m]m-[yy]yy
  • dd.[m]m.[yy]yy

Format harfiah string untuk hari-tahun-bulan

SET DATEFORMAT dym;
  • dd/[yy]yy/[m]m
  • dd-[yy]yy-[m]m
  • dd.[yy]yy.[m]m

Format literal string untuk tahun-bulan-hari

SET DATEFORMAT ymd;
  • [yy]yy/[m]m/dd
  • [yy]yy-[m]m-dd
  • [yy]yy-[m]m-dd

Daftar format alfabet

  • [dd] mon[,] yyyy
  • dd mon[,][yy]yy
  • dd [yy]yy mon
  • [dd] yyyy mon
  • mon [dd][,] yyyy
  • mon dd[,] [yy]
  • mon yyyy [dd]
  • yyyy mon [dd]
  • yyyy [dd] mon

mon mewakili nama bulan lengkap, atau singkatan bulan, yang diberikan dalam bahasa saat ini. Koma bersifat opsional dan kapitalisasi diabaikan.

Untuk menghindari ambiguitas, gunakan tahun empat digit.

Jika hari hilang, hari pertama dalam sebulan disediakan.

Daftar format ISO 8601

  • yyyy-MM-dd
  • yyyyMMdd

Sama seperti standar SQL. Format ini adalah satu-satunya format yang didefinisikan sebagai standar internasional.

Daftar format yang tidak dipisahkan

  • [yy]yyMMdd
  • yyyy[MMdd]

Data tanggal dapat ditentukan dengan empat, enam, atau delapan digit. String enam digit atau delapan digit selalu ditafsirkan sebagai ymd. Bulan dan hari harus selalu dua digit. String empat digit ditafsirkan sebagai tahun.

Format tanggal ODBC

  • { d 'yyyy-MM-dd' }

ODBC API spesifik.

Format tanggal XML W3C

  • yyyy-MM-ddTZD

Didukung untuk penggunaan XML/SOAP.

TZD adalah pendesain 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) adalah tanda wajib offset zona waktu. Tanda ini menunjukkan bahwa, untuk mendapatkan waktu lokal, offset zona waktu ditambahkan atau dikurangi dari waktu Waktu Universal Terkoordinasi (UTC). Rentang offset zona waktu yang valid adalah dari -14:00 ke +14:00.

Kepatuhan ANSI dan ISO 8601

tanggal sesuai dengan definisi standar ANSI SQL untuk kalender Gregorian:

Jenis data tanggalwaktu 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
time hh:mm:ss[.nnnnnnn] SQL_WVARCHAR atau SQL_VARCHAR DBTYPE_WSTR atau DBTYPE_STR Java.sql.String String atau SqString
date yyyy-MM-dd SQL_WVARCHAR atau SQL_VARCHAR DBTYPE_WSTR atau DBTYPE_STR Java.sql.String String atau SqString
datetime2 yyyy-MM-dd HH:mm:ss[.nnnnnnn] SQL_WVARCHAR atau SQL_VARCHAR DBTYPE_WSTR atau DBTYPE_STR Java.sql.String String atau SqString
datetimeoffset yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm SQL_WVARCHAR atau SQL_VARCHAR DBTYPE_WSTR atau 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 CAST fungsi dan CONVERT dengan data tanggal dan waktu, lihat CAST dan CONVERT.

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 dinaikkan:

Jenis operand clash: tanggal tidak kompatibel dengan waktu.

Jika konversi ke tanggalwaktu, komponen tanggal akan disalin. Kode berikut menunjukkan hasil konversi nilai tanggal menjadi nilai tanggalwaktu.

DECLARE @date AS DATE = '12-10-25';

DECLARE @datetime AS DATETIME = @date;

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

Berikut set hasilnya.

@date      @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000

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 dinaikkan, dan nilai smalldatetime diatur ke NULL:

Konversi jenis data tanggal ke jenis data smalldatetime menghasilkan nilai di luar rentang.

Kode berikut menunjukkan hasil konversi nilai tanggal menjadi nilai smalldatetime.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @smalldatetime AS SMALLDATETIME = @date;

SELECT @date AS '@date',
       @smalldatetime AS '@smalldatetime';

Berikut set hasilnya.

@date      @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00

Untuk konversi ke datetimeoffset(n), tanggal disalin, dan waktu diatur ke 00:00.0000000 +00:00. Kode berikut menunjukkan hasil konversi nilai tanggal menjadi nilai datetimeoffset(3).

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;

SELECT @date AS '@date',
       @datetimeoffset AS '@datetimeoffset';

Berikut set hasilnya.

@date      @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00

Ketika konversi ke datetime2(n), komponen tanggal disalin, dan komponen waktu diatur ke 00:00.000000. Kode berikut menunjukkan hasil konversi nilai tanggal menjadi nilai datetime2(3).

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetime2 AS DATETIME2 (3) = @date;

SELECT @date AS '@date',
       @datetime2 AS '@datetime2(3)';

Berikut set hasilnya.

@date      @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000

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 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 harfiah ke jenis data tanggal .

String input literal date
TANGGAL ODBC Literal string ODBC dipetakan ke jenis data tanggalwaktu . Setiap operasi penugasan 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 Trivial
Hanya WAKTU Nilai default disediakan.
TimeZONE saja Nilai default disediakan.
TANGGAL + WAKTU Bagian DATE dari string input digunakan.
DATE + TIMEZONE Dilarang.
TIME + TIMEZONE Nilai default disediakan.
TANGGAL + WAKTU + ZONA WAKTU Bagian DATE dari DATETIME lokal digunakan.

Contoh

Contoh berikut membandingkan hasil transmisi string dengan setiap jenis data tanggal dan waktu.

SELECT CAST ('2022-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
       CAST ('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
       CAST ('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
       CAST ('2022-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 2022-05-08
smalldatetime 2022-05-08 12:35:00
datetime 2022-05-08 12:35:29.123
datetime2 2022-05-08 12:35:29.1234567
datetimeoffset 2022-05-08 12:35:29.1234567 +12:15