Bahasa
Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.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.DateTime2DbType.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. |