Artikel ini berisi contoh mengonversi tanggal nilai ke datetime2 nilai di SQL Server.
Saat Anda mengonversi tanggal nilai ke datetime2 , informasi tambahan ditambahkan ke nilai. Ini karena datetime2 tipe data berisi informasi tanggal dan waktu. Tanggal tipe data, di sisi lain, hanya berisi informasi tanggal.
datetime2 tipe data pada dasarnya adalah perpanjangan dari datetime tipe data. Ini memiliki rentang tanggal yang lebih besar, presisi pecahan default yang lebih besar, dan presisi yang ditentukan pengguna opsional.
Bagaimanapun, proses konversi persis sama terlepas dari tipe datanya. Satu-satunya perbedaan adalah jumlah informasi yang tersedia antara tanggal , waktu tanggal dan datetime2 .
Contoh 1 – Konversi Implisit
Berikut adalah contoh konversi implisit antara tanggal dan datetime2 .
DECLARE @thedate date, @thedatetime2 datetime2 SET @thedate = '2020-12-01' SET @thedatetime2 = @thedate SELECT @thedate AS 'date', @thedatetime2 AS 'datetime2';
Hasil:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 | +------------+-----------------------------+
Ini adalah konversi implisit karena kami tidak menggunakan fungsi konversi (seperti yang di bawah ini) untuk mengonversinya secara eksplisit. Dalam hal ini, SQL Server melakukan konversi implisit di balik layar saat kami mencoba menetapkan tanggal nilai ke datetime2 variabel.
Kita dapat melihat bahwa tanggal variabel hanya berisi informasi tanggal, sedangkan datetime2 variabel berisi informasi tanggal dan waktu.
Selain itu, kami mendapatkan lebih banyak informasi waktu daripada yang akan kami dapatkan jika kami mengonversinya ke waktu-tanggal tipe data.
Saat Anda mengonversi antara tanggal dan datetime2 menggunakan presisi default (7), komponen waktu diatur ke 00:00:00.0000000
(dibandingkan dengan 00:00:00.000
untuk waktu kencan ). Anda dapat mengurangi presisi jika Anda mau (lihat di bawah). Mengurangi presisi juga dapat mengurangi jumlah ruang yang diperlukan untuk menyimpan nilai.
Alasan komponen waktu semuanya nol adalah karena nilai tanggal tidak berisi informasi waktu apa pun, jadi SQL Server tidak dapat mengetahui jam berapa yang Anda inginkan (jika ada).
Contoh 2 – Ubah Waktu
Jika Anda perlu menentukan waktu (tetapi tetap pada tanggal yang sama), Anda dapat menggunakan DATEADD()
berfungsi untuk melakukan hal itu.
DECLARE @thedate date, @thedatetime2 datetime2 SET @thedate = '2020-12-01' SET @thedatetime2 = @thedate SET @thedatetime2 = DATEADD(hour, 8, @thedatetime2) SELECT @thedate AS 'date', @thedatetime2 AS 'datetime2';
Hasil:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 08:00:00.0000000 | +------------+-----------------------------+
Contoh 3 – Konversi Eksplisit menggunakan CAST()
Berikut ini contoh konversi eksplisit. Dalam hal ini, saya menggunakan CAST()
berfungsi langsung di dalam SELECT
pernyataan untuk secara eksplisit mengonversi antara tanggal dan datetime2 .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime2) AS 'datetime2';
Hasil:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 | +------------+-----------------------------+
Jadi kita mendapatkan hasil yang sama dengan konversi implisit.
Kita juga bisa mengatur waktu seperti ini:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime2)) AS 'datetime2';
Hasil:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 08:00:00.0000000 | +------------+-----------------------------+
Contoh 4 – Konversi Eksplisit menggunakan CONVERT()
Berikut adalah contoh konversi eksplisit menggunakan CONVERT()
fungsi alih-alih CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime2, @thedate) AS 'datetime2';
Hasil:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 | +------------+-----------------------------+
Dan menyesuaikan waktu:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime2, @thedate)) AS 'datetime2';
Hasil:
+------------+-----------------------------+ | date | datetime2 | |------------+-----------------------------| | 2020-12-01 | 2020-12-01 08:00:00.0000000 | +------------+-----------------------------+
Contoh 5 – Presisi
datetime2 tipe data memungkinkan Anda untuk menentukan presisi (hingga default 7). Dengan kata lain, Anda tidak perlu menggunakan 7 digit penuh jika tidak perlu.
Contoh:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime2(2), @thedate) AS 'datetime2(2)', CONVERT(datetime2(4), @thedate) AS 'datetime2(4)';
Hasil:
+------------+------------------------+--------------------------+ | date | datetime2(2) | datetime2(4) | |------------+------------------------+--------------------------| | 2020-12-01 | 2020-12-01 00:00:00.00 | 2020-12-01 00:00:00.0000 | +------------+------------------------+--------------------------+
Salah satu manfaat dari pengurangan presisi adalah juga dapat mengurangi jumlah ruang yang dibutuhkan untuk menyimpan nilai. Secara khusus, 6 byte untuk presisi kurang dari 3, 7 byte untuk presisi 3 atau 4, dan semua presisi lainnya memerlukan 8 byte. Namun, perhatikan bahwa byte pertama digunakan untuk menyimpan presisi, jadi nilai sebenarnya adalah ukuran penyimpanan yang ditunjukkan di sini ditambah 1 byte tambahan untuk menyimpan presisi.