Bagikan melalui


data tanggal dan waktu

SQL Server 2008 memperkenalkan jenis data baru untuk menangani informasi tanggal dan waktu. Jenis data baru menyertakan jenis terpisah untuk tanggal dan waktu, dan jenis data yang diperluas dengan rentang, presisi, dan kesadaran zona waktu yang lebih besar. Mulai dari .NET Framework versi 3.5 Paket Layanan (SP) 1, .NET Framework Data Provider untuk SQL Server (System.Data.SqlClient) menyediakan dukungan penuh untuk semua fitur baru dari SQL Server 2008 Database Engine. Anda harus menginstal .NET Framework 3.5 SP1 (atau yang lebih baru) untuk menggunakan fitur baru ini dengan SqlClient.

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 menetapkan DATEFORMAT yang menentukan urutan bagian tanggal. Anda dapat menggunakan pernyataan SET DATEFORMAT Transact-SQL pada koneksi untuk membedakan nilai tanggal dengan memesan bagian tanggal dalam urutan MDY, DMY, YMD, YDM, MYD, atau DYM.

Jika Anda tidak menentukan DATEFORMAT untuk koneksi, SQL Server menggunakan bahasa default yang terkait dengan koneksi. Misalnya, string tanggal '01/02/03' akan ditafsirkan sebagai MDY (2 Januari 2003) pada server dengan pengaturan bahasa Inggris Amerika Serikat, dan sebagai DMY (1 Februari 2003) pada server dengan pengaturan bahasa Inggris British. 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

Anda dapat menentukan jenis data SqlParameter dengan menggunakan salah satu dari SqlDbType enumerasi sebelumnya.

Catatan

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

Anda juga dapat menentukan jenis SqlParameter secara umum dengan mengatur properti DbType dari objek SqlParameter ke nilai enumerasi DbType tertentu. Nilai enumerasi berikut telah ditambahkan ke DbType untuk 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 objek parameter dinodekan dari jenis .NET Framework nilai objek parameter, atau dari DbType 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
waktu System.TimeSpan Waktu Waktu
tanggalwaktu2 System.DateTime DateTime2 DateTime2
tanggalwaktulewat 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 dibatalkan. 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 jumlah tempat desimal di mana bagian waktu dari nilai diselesaikan untuk Time, DateTime2, dan DateTimeOffset. Nilai default adalah 0, yang berarti bahwa skala aktual dinodekan dari nilai dan dikirim ke server.
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

Anda dapat membuat objek SqlParameter dengan menggunakan konstruktornya, atau dengan menambahkannya ke kumpulan SqlCommandParameters dengan memanggil metode Add dari SqlParameterCollection. Metode Add akan mengambil sebagai input baik argumen konstruktor atau 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-02 1:00:00+0");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffSet
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");

TambahkanDenganNilai

Anda juga dapat menyediakan parameter dengan menggunakan metode AddWithValue dari SqlCommand, seperti yang ditunjukkan pada fragmen kode berikut. Namun, metode AddWithValue tidak mengizinkan Anda menentukan DbType atau SqlDbType untuk parameter.

command.Parameters.AddWithValue(
    "@date", DateTimeOffset.Parse("16660902"));
command.Parameters.AddWithValue( _
    "@date", DateTimeOffset.Parse("16660902"))

Parameter @date dapat dipetakan ke jenis data date, datetime, atau datetime2 di server. Saat bekerja dengan jenis data datetime baru, Anda harus secara eksplisit mengatur properti SqlDbType parameter ke jenis data instans. Menggunakan Variant atau memberikan nilai parameter secara implisit dapat menyebabkan masalah dengan kompatibilitas mundur dengan jenis data datetime dan smalldatetime.

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

jenis CLR SqlDbType yang Dinodekan
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 struktur DateTime.
GetDateTimeOffset Mengambil nilai kolom yang ditentukan sebagai struktur DateTimeOffset.
GetProviderSpecificFieldType Mengembalikan jenis yang merupakan jenis khusus penyedia yang mendasari untuk 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. InvalidCastException terjadi jika data tidak dapat dinyatakan sebagai SqlString.
GetSqlValue Mengambil data kolom sebagai 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. InvalidCastException terjadi jika data tidak dapat dinyatakan sebagai string.
GetTimeSpan Mengambil nilai kolom yang ditentukan sebagai struktur TimeSpan.
GetValue Mengambil nilai kolom yang ditentukan sebagai jenis CLR yang mendasarinya.
GetValues Mengambil nilai kolom dalam array.
GetSchemaTable Mengembalikan DataTable yang menjelaskan metadata kumpulan hasil.

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 literal yang berbeda, yang kemudian dievaluasi oleh SQL Server pada runtime, mengonversinya menjadi 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