Bahasa

data tanggal dan waktu

SQL Server 2008 memperkenalkan jenis data terpisah untuk tanggal dan waktu, dan jenis data yang diperluas dengan rentang, presisi, dan dukungan zona waktu yang lebih besar. Gunakan paket NuGet Microsoft.Data.SqlClient untuk mengakses jenis data ini dari aplikasi klien. Untuk contoh dalam artikel ini, impor Microsoft.Data.SqlClient dan System.Data di C# atau Visual Basic. Jenis nilai SQL umum tetap ada di System.Data.SqlTypes.

Versi SQL Server yang lebih lama dari SQL Server 2008 hanya memiliki dua jenis data untuk bekerja dengan nilai tanggal dan waktu: datetime dan smalldatetime. Kedua jenis data ini berisi nilai tanggal dan nilai waktu, yang menyulitkan untuk bekerja hanya dengan nilai tanggal atau waktu saja. Juga, jenis data ini hanya mendukung tanggal yang terjadi setelah pengenalan kalender Gregorian di Inggris pada tahun 1753. Keterbatasan lainnya adalah bahwa jenis data yang lebih lama ini tidak menyadari zona waktu, yang membuatnya sulit untuk bekerja dengan data yang berasal dari beberapa zona waktu.

Untuk informasi selengkapnya tentang jenis tanggal dan waktu di SQL Server, lihat Tipe dan Fungsi Data Tanggal dan Waktu.

Tipe Data Tanggal/Waktu Diperkenalkan di SQL Server 2008

Tabel berikut menjelaskan jenis data tanggal dan waktu yang baru.

Tipe data SQL Server Deskripsi
date Tipe data date memiliki rentang 1 Januari hingga 31 Desember 9999 dengan akurasi 1 hari. Nilai default adalah 1 Januari 1900. Ukuran penyimpanan adalah 3 byte.
time Tipe data time menyimpan nilai waktu saja, berdasarkan jam 24 jam. Tipe data time memiliki rentang 00:00:00,0000000 hingga 23:59:59.9999999 dengan akurasi 100 nanodetik. Nilai defaultnya adalah 00:00:00,0000000 (tengah malam). Tipe data time mendukung presisi pecahan detik yang ditentukan pengguna, dan ukuran penyimpanan bervariasi dari 3 hingga 6 byte, berdasarkan presisi yang ditentukan.
datetime2 Tipe data datetime2 menggabungkan rentang dan presisi jenis data date dan time menjadi satu jenis data.

Nilai default dan format literal string sama dengan yang ditentukan dalam jenis data date dan time.
datetimeoffset Tipe data datetimeoffset memiliki semua fitur datetime2 dengan offset zona waktu tambahan. Offset zona waktu direpresentasikan sebagai [+|-] JJ:MM. HH adalah 2 digit mulai dari 00 hingga 14 yang mewakili jumlah jam dalam offset zona waktu. MM adalah 2 digit mulai dari 00 hingga 59 yang mewakili jumlah menit tambahan dalam offset zona waktu. Format waktu didukung hingga 100 nanodetik. Tanda + atau - wajib menunjukkan apakah offset zona waktu ditambahkan atau dikurangi dari UTC (Universal Time Coordinate atau Greenwich Mean Time) untuk mendapatkan waktu lokal.

Catatan

Untuk informasi selengkapnya tentang menggunakan kata kunci Type System Version, lihat ConnectionString.

Format Tanggal dan Urutan Tanggal

Bagaimana SQL Server mem-parsing nilai tanggal dan waktu tidak hanya bergantung pada jenis versi sistem dan versi server, tetapi juga pada pengaturan format dan bahasa default server. String tanggal yang berfungsi untuk format tanggal satu bahasa mungkin tidak dapat dikenali jika kueri dijalankan oleh koneksi yang menggunakan pengaturan format tanggal dan bahasa yang berbeda.

Pernyataan Transact-SQL SET LANGUAGE secara implisit DATEFORMAT menetapkan format tanggal yang menentukan urutan bagian tanggal. Anda dapat menggunakan pernyataan Transact-SQL SET DATEFORMAT pada koneksi untuk menghilangkan ambiguitas nilai tanggal dengan mengurutkan bagian-bagian tanggal dalam urutan MDY, DMY, YMD, YDM, MYD, atau DYM.

Jika Anda tidak menentukan koneksi apa punDATEFORMAT, SQL Server menggunakan bahasa default yang terkait dengan koneksi. Misalnya, string tanggal '01/02/03' akan ditafsirkan sebagai MDY (2 Januari 2003) di server dengan pengaturan bahasa Inggris Amerika Serikat, dan sebagai DMY (1 Februari 2003) di server dengan pengaturan bahasa Inggris Britania. Tahun ditentukan dengan menggunakan aturan tahun batas SQL Server, yang menentukan tanggal batas untuk menetapkan nilai abad. Untuk informasi selengkapnya, lihat Opsi batas dua digit tahun.

Catatan

Format tanggal YDM tidak didukung saat mengonversi dari format string ke date, time, datetime2, atau datetimeoffset.

Untuk informasi selengkapnya tentang cara SQL Server menafsirkan data tanggal dan waktu, lihat Menggunakan Data Tanggal dan Waktu.

Jenis dan Parameter Data Tanggal/Waktu

Pencacahan berikut telah ditambahkan ke SqlDbType untuk mendukung jenis data tanggal dan waktu yang baru.

  • SqlDbType.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.DateTimeOffset

Untuk menentukan jenis data untuk objek SqlParameter, gunakan salah satu nilai enumerasi SqlDbType sebelumnya.

Catatan

Anda tidak dapat mengatur properti DbType dari SqlParameter ke SqlDbType.Date.

Untuk menentukan jenis parameter secara generik, atur properti DbType ke nilai enumerasi DbType. Nilai berikut DbType mendukung jenis data datetime2 dan datetimeoffset:

  • DbType.DateTime2

  • DbType.DateTimeOffset

Pencacahan baru ini melengkapi pencacahan Date, Time, dan DateTime, yang ada di versi .NET Framework sebelumnya.

Jenis penyedia data .NET Framework dari objek parameter disimpulkan dari jenis .NET Framework dari nilai objek parameter, atau dari DbType dari objek parameter. Tidak ada jenis data System.Data.SqlTypes baru yang diperkenalkan untuk mendukung jenis data tanggal dan waktu yang baru. Tabel berikut menjelaskan pemetaan antara jenis data tanggal dan waktu SQL Server 2008 dan jenis data CLR.

Tipe data SQL Server Jenis .NET Framework System.Data.SqlDbType System.Data.DbType
date System.DateTime Date Date
time System.TimeSpan Time Time
datetime2 System.DateTime DateTime2 DateTime2
datetimeoffset System.DateTimeOffset DateTimeOffset DateTimeOffset
datetime System.DateTime DateTime DateTime
smalldatetime System.DateTime DateTime DateTime

Properti SqlParameter

Tabel berikut menjelaskan SqlParameter properti yang relevan dengan jenis data tanggal dan waktu.

Properti Deskripsi
IsNullable Mendapatkan atau menetapkan apakah suatu nilai dapat bernilai null. Saat Anda mengirim nilai parameter nol ke server, Anda harus menentukan DBNull, bukan null (Nothing dalam Visual Basic). Untuk informasi selengkapnya tentang null database, lihat Menangani Nilai Null.
Precision Mendapatkan atau menetapkan jumlah digit maksimum yang digunakan untuk mewakili nilai. Pengaturan ini diabaikan untuk jenis data tanggal dan waktu.
Scale Mendapatkan atau mengatur presisi pecahan detik untuk Time, DateTime2, dan DateTimeOffset. Jika Anda tidak secara eksplisit mengatur skala, driver mengirim skala 7. Menyetel skala ke 0 secara eksplisit meminta nol digit pecahan detik.
Size Diabaikan untuk jenis data tanggal dan waktu.
Value Mendapatkan atau menetapkan nilai parameter.
SqlValue Mendapatkan atau menetapkan nilai parameter.

Catatan

Nilai waktu yang kurang dari nol atau lebih besar dari atau sama dengan 24 jam akan menghasilkan ArgumentException.

Membuat Parameter

Buat objek SqlParameter dengan konstruktor, atau panggil metode Add pada koleksi Parameters milik perintah. Metode ini Add menerima baik argumen konstruktor maupun objek parameter yang ada.

Bagian selanjutnya dalam topik ini memberikan contoh cara menentukan parameter tanggal dan waktu. Untuk contoh tambahan bekerja dengan parameter, lihat Mengonfigurasi Parameter dan Jenis Data Parameter dan Parameter DataAdapter.

Contoh Tanggal

Fragmen kode berikut menunjukkan cara menentukan parameter date.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Date";
parameter.SqlDbType = SqlDbType.Date;
parameter.Value = "2007/12/1";
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Date"
parameter.SqlDbType = SqlDbType.Date
parameter.Value = "2007/12/1"

Contoh Waktu

Fragmen kode berikut menunjukkan cara menentukan parameter time.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@time";
parameter.SqlDbType = SqlDbType.Time;
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Time"
parameter.SqlDbType = SqlDbType.Time
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay

Contoh Datetime2

Fragmen kode berikut menunjukkan cara menentukan parameter datetime2 dengan bagian tanggal dan waktu.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Datetime2";
parameter.SqlDbType = SqlDbType.DateTime2;
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Datetime2"
parameter.SqlDbType = SqlDbType.DateTime2
parameter.Value = DateTime.Parse("1666-09-02 1:00:00")

Contoh DateTimeOffSet

Fragmen kode berikut menunjukkan cara menentukan parameter DateTimeOffset dengan tanggal, waktu, dan offset zona waktu 0.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DateTimeOffSet";
parameter.SqlDbType = SqlDbType.DateTimeOffset;
parameter.Value = DateTimeOffset.Parse("1666-09-02T01:00:00+00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffset
parameter.Value = DateTimeOffset.Parse("1666-09-02T01:00:00+00:00")

TambahkanDenganNilai

Untuk menyediakan parameter, Anda juga dapat memanggil AddWithValue pada koleksi Parameters milik perintah, seperti yang ditunjukkan dalam fragmen kode berikut. Namun, AddWithValue tidak memungkinkan Anda menentukan tipe DbType atau nilai SqlDbType untuk parameter.

command.Parameters.AddWithValue(
    "@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"));
command.Parameters.AddWithValue( _
    "@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"))

Untuk nilai ini DateTimeOffset , AddWithValue menyimpulkan SqlDbType.DateTimeOffset. Untuk menargetkan tipe data tanggal atau waktu SQL Server yang berbeda, atur properti parameter SqlDbType secara eksplisit.

Tabel berikut menunjukkan SqlDbTypes mana yang dinodekan dari jenis CLR mana:

jenis CLR Disimpulkan SqlDbType
DateTime SqlDbType.DateTime
TimeSpan SqlDbType.Time
DateTimeOffset SqlDbType.DateTimeOffset

Mengambil Data Tanggal dan Waktu

Tabel berikut menjelaskan metode yang digunakan untuk mengambil nilai tanggal dan waktu SQL Server 2008.

Metode SqlClient Deskripsi
GetDateTime Mengambil nilai kolom yang ditentukan sebagai DateTime.
GetDateTimeOffset Mengambil nilai kolom yang ditentukan sebagai DateTimeOffset.
GetProviderSpecificFieldType Mengembalikan jenis yang merupakan jenis spesifik penyedia yang mendasari dari bidang. Mengembalikan jenis yang sama seperti GetFieldType untuk jenis tanggal dan waktu baru.
GetProviderSpecificValue Mengambil nilai dari kolom yang ditentukan. Mengembalikan jenis yang sama seperti GetValue untuk jenis tanggal dan waktu yang baru.
GetProviderSpecificValues Mengambil nilai dalam array yang ditentukan.
GetSqlString Mengambil nilai kolom sebagai SqlString. Metode melemparkan InvalidCastException jika data tidak dapat diekspresikan sebagai SqlString.
GetSqlValue Mengambil data kolom sebagai nilai default SqlDbType. Mengembalikan jenis yang sama seperti GetValue untuk jenis tanggal dan waktu yang baru.
GetSqlValues Mengambil nilai dalam array yang ditentukan.
GetString Mengambil nilai kolom sebagai string jika Type System Version diatur ke SQL Server 2005. Metode melemparkan InvalidCastException jika data tidak dapat diekspresikan sebagai string.
GetTimeSpan Mengambil nilai kolom yang ditentukan sebagai TimeSpan.
GetValue Mengambil nilai kolom yang ditentukan sebagai jenis CLR yang mendasarinya.
GetValues Mengambil nilai kolom dalam array.
GetSchemaTable Mengembalikan metadata kumpulan hasil dalam objek DataTable.

Catatan

Tanggal dan waktu baru SqlDbTypes tidak didukung untuk kode yang sedang dijalankan di SQL Server. Pengecualian akan dimunculkan jika salah satu dari jenis ini diteruskan ke server.

Menentukan Nilai Tanggal dan Waktu sebagai Literal

Anda dapat menentukan jenis data tanggal dan waktu dengan menggunakan berbagai format string harfiah yang berbeda, yang kemudian dievaluasi SQL Server pada runtime, mengonversinya ke struktur tanggal/waktu internal. SQL Server mengenali data tanggal dan waktu yang diapit oleh tanda kutip tunggal ('). Contoh berikut menunjukkan beberapa format:

  • Format tanggal abjad, seperti 'October 15, 2006'.

  • Format tanggal numerik, seperti '10/15/2006'.

  • Format string yang tidak dipisahkan, seperti '20061015', yang akan ditafsirkan sebagai 15 Oktober 2006 jika Anda menggunakan format tanggal standar ISO.

Nilai waktu yang kurang dari nol atau lebih besar dari atau sama dengan 24 jam akan menghasilkan ArgumentException.

SQL Server sumber daya dokumen

Untuk informasi selengkapnya tentang bekerja dengan nilai tanggal dan waktu di SQL Server, lihat artikel berikut ini.

Artikel Deskripsi
Tipe dan Fungsi Data Tanggal dan Waktu (Transact-SQL) Memberikan ringkasan tentang semua jenis dan fungsi data tanggal dan waktu Transact-SQL.
Menggunakan Data Tanggal dan Waktu Memberikan informasi tentang tanggal dan waktu jenis dan fungsi data, dan contoh penggunaannya.
Tipe Data (Transact-SQL) Menjelaskan jenis data sistem di SQL Server.

Lihat juga