Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Tipe Data Tanggal Waktu T-SQL

Pengantar

Tipe data adalah atribut yang menentukan jenis data yang dapat disimpan oleh objek seperti kolom, variabel lokal, ekspresi, dan parameter. Di seluruh dunia RDBMS, tipe data biasanya dikelompokkan ke dalam tipe data string, numerik, dan tanggal.

T-SQL mendukung 6 tipe data tanggal dan waktu yaitu:

  1. Waktu kencan
  2. Waktu kecil
  3. Tanggal
  4. Waktu
  5. Tanggal2
  6. Offset tanggal-waktu

Dua tipe data pertama dianggap sebagai versi lama dari yang lebih baru. Dalam artikel ini, kami fokus pada tipe data tanggal dan, khususnya, pada waktu-tanggal dan datetime2 tipe data yang tersedia di SQL Server. Tabel 1 memberikan rincian berbagai tipe data tanggal dan waktu yang tersedia di SQL Server.

[id tabel=59 /]

Tab 1 Jenis Data Tanggal dan Waktu

Datetime dan Datetime2

Datatime adalah tipe data yang menggabungkan tanggal dengan waktu dalam format 24 jam. Rentang tanggal yang didukung dalam tipe data datetime adalah seperti yang ditunjukkan pada Tab 1 dan memiliki akurasi sekitar 3 milidetik.

Datetime2 adalah perpanjangan dari tipe data datetime. Ini mengakomodasi rentang nilai yang lebih luas dan memiliki akurasi 100 nanodetik yang jauh lebih baik daripada pendahulunya. Aspek penting lainnya dari tipe data dattime2 adalah bahwa penyimpanan yang diperlukan berkisar antara 6 hingga 8 byte, bergantung pada presisi yang Anda pilih.

  • Anda dapat mencapai presisi 1 milidetik dengan mengizinkan tiga tempat desimal pada komponen detik. Dengan demikian, setiap nilai akan menggunakan enam byte.
  • Anda dapat mencapai presisi 100 nanodetik dengan mengizinkan tujuh tempat desimal pada komponen detik. Dengan demikian, setiap nilai akan menggunakan delapan byte.

Demonstrasi

Masukkan Nilai Tanggal yang Salah

Kami membuat tabel dengan detail yang ditunjukkan pada Daftar 1 untuk melakukan beberapa demonstrasi yang menggambarkan cara memanipulasi datetime dan datetime2 tipe data.

-- Listing 1 Create Table and insert Rows
-- Create Table with Data Types
use Practice2017
go
create table staffers (
fname varchar(50),
lname varchar(50),
JobTitle varchar(100),
DOB datetime,
PreciseDOB datetime2,
LastLoginTime time)
go

Kemudian kami mencoba untuk mengisi tabel dengan satu baris seperti yang ditunjukkan pada Daftar 2 tetapi kami mendapatkan kesalahan yang ditunjukkan pada Gambar. 1. Kata kunci dalam pesan kesalahan adalah nilai "di luar jangkauan". Yang dikatakan adalah bahwa nilainya yang kami coba masukkan lebih rendah dari 01-Jan-1753 atau lebih tinggi dari 31-Des-9999 . Dalam hal ini, masalahnya adalah kami tidak menggunakan format entri yang direkomendasikan untuk ‘YYYYMMDD jj:mm:ss.nnn ' (lihat Tabel 1). Membaca nilai ‘06101979 ', SQL Server mengasumsikan 0610 sebagai tahun (cocok YYYY). Kesalahan ini tidak muncul untuk tipe data datetime2 karena rentang untuk datetime2 lebih lebar mulai tahun 0001.

-- Listing 2 Insert Rows with Wrong Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06101979'
,'06101979'
,'8:00 AM'
)

Gbr. 1 Kesalahan Dikembalikan untuk Kolom Datetime

Masukkan Nilai Tanggal yang Benar

Kami mencoba memperbaiki masalah dengan memasukkan format entri yang benar untuk kolom datetime seperti yang ditunjukkan pada Listing 3. Ketika kami menjalankan pernyataan lagi, kami mendapatkan kesalahan yang ditunjukkan pada Gambar. 2. Kesalahan ini pada dasarnya disebabkan oleh kegagalan yang sama untuk mengikuti spesifikasi format entri. Namun, masalahnya terletak pada bagian lain dari tanggal '06101979 ‘ yang cocok dengan format entri ‘YYYYMMDD jj:mm:ss.nnn '. Dalam hal ini, SQL Server mengasumsikan 19 Adalah satu bulan dan 79 adalah hari dalam sebulan. Upaya konversi implisit ini gagal karena tidak ada pernyataan sebelumnya yang benar.

-- Listing 3 Insert Rows with One Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01061979'
,'8:00 AM'
)

Gbr. 2 Kesalahan Dikembalikan untuk Kolom Datetime2

Daftar 4 memungkinkan kita untuk mendemonstrasikan pernyataan terakhir. Nilai 01101201 cocok dengan rentang untuk datetime2 dan kami dapat memasukkan baris. Nilai ini diterjemahkan menjadi 1 Desember 0110 seperti yang kita lihat pada gambar 3.

-- Listing 4: Insert Rows with Correct Date Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01101201'
,'8:00 AM')
-- Listing 5: Insert Rows with All Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'19791006'
,'8:00 AM'
)

Memverifikasi Data

Gbr. 3 Mengkueri Kumpulan Data

Saat kami menanyakan tabel staf, kami melihat dengan jelas ketepatan tipe data datetime jika dibandingkan dengan alternatif datetime2. Mari beralih ke sesuatu yang sedikit lebih menyeramkan:Pengaturan bahasa. Lihat Daftar 6. Kami memasukkan catatan yang sama persis menggunakan format tanggal 06/10/1979 . Format ini BUKAN bahasa netral sehingga ketika kita mengatur bahasa ke British di pernyataan pertama dan kemudian ke us_english di detik kami menemukan bahwa kami telah memasukkan dua tanggal yang berbeda sebenarnya meskipun nilai mentah kami sama. Inilah mengapa sangat penting untuk selalu menggunakan format entri yang disarankan saat menangani datetime dan datetime2 .

-- Listing 6: Impact of Language Settings

set language british
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)


set language us_english
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)

Gbr. 4 Meminta Staf

Dengan pengaturan bahasa sebagai British , SQL Server menafsirkan dua angka pertama sebagai hari tetapi dengan pengaturan bahasa sebagai us_english , SQL Server menafsirkan dua angka pertama sebagai satu bulan. Satu hal terakhir yang perlu kami sebutkan di sini adalah bahwa dalam memasukkan catatan kami, kami tidak menentukan komponen waktu sehingga SQL Server secara otomatis mengasumsikan tengah malam rata-rata dari tanggal yang ditentukan.

Kesimpulan

Dalam artikel ini, kita telah mempelajari seperti apa tipe data datetime dan datetime2, perbedaan utamanya, dan bagaimana memastikan Anda memasukkan tanggal yang benar saat menggunakan tipe data ini. Dalam perjalanannya, kami juga telah memeriksa dua kesalahan yang dapat dialami oleh pengembang saat bekerja dengan tipe data ini.

Referensi

  • Tipe Data SQL
  • Ben-Gan, I. (2016) Dasar-dasar T-SQL. hal.74-78. Microsoft Press.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kumpulan Masalah 1 – Mengidentifikasi Entitas

  2. 12 Operator SQL yang Umum Digunakan

  3. Cara Mengelompokkan Berdasarkan Tahun di SQL

  4. Instal dan Konfigurasi Perangkat Lunak XAMPP di Windows Server 2019

  5. Bagaimana cara menjatuhkan kolom dalam SQL?