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. |