Artikel ini berisi contoh konversi waktu nilai ke datetime nilai di SQL Server.
Saat Anda mengonversi waktu nilai ke datetime , informasi tambahan ditambahkan ke nilai. Ini karena waktu tanggal tipe data berisi informasi tanggal dan waktu. Waktu tipe data, di sisi lain, hanya berisi informasi waktu. Oleh karena itu, informasi tanggal ditambahkan ke nilai saat Anda melakukan konversi tersebut. Secara khusus, tanggal ditetapkan ke '1900-01-01'.
Contoh 1 – 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 dari waktu ke waktu kencan .
DECLARE @thetime timeSET @thetime ='23:15:59.004007'SELECT @thetime AS 'time', CAST(@thetime AS datetime) AS 'datetime';
Hasil:
+------------------+-------------------------+| waktu | datetime ||------------------+-------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+-------+------------------- ------+
Saat Anda mengonversi dari waktu ke waktu kencan , komponen tanggal disetel ke 1900-01-01
.
Perhatikan juga bahwa nilai waktu itu sendiri disajikan secara berbeda di kedua tipe data ini. Waktu tipe data menambahkan nol di akhir (karena memiliki presisi yang lebih tinggi – skala defaultnya adalah 7). Sebaliknya, waktu-tanggal nilai menggunakan skala yang lebih rendah dan dibulatkan ke peningkatan .000, .003, atau .007 detik. Jika Anda merasa ini bermasalah, pertimbangkan untuk mengonversi ke datetime2 sebagai gantinya.
Contoh 2 – Presisi/Skala Lebih Rendah
Pada contoh sebelumnya, waktu nilai memiliki presisi pecahan detik yang lebih tinggi daripada datetime nilai. Ini karena menggunakan skala default 7. Tapi kita bisa mengubahnya ke nilai yang lebih rendah jika diperlukan.
Untuk memperjelas, skala adalah jumlah digit di sebelah kanan titik desimal dalam suatu bilangan. Presisi adalah jumlah digit dalam bilangan tersebut. Kita dapat menentukan skala dengan menambahkan angka dalam tanda kurung ke tipe data.
Inilah yang terjadi jika saya secara eksplisit menyetel waktu nilai untuk memiliki lebih rendah skala dari datetime nilai.
DECLARE @thetime time(0)SET @thetime ='23:15:59.004007'SELECT @thetime AS 'time', CAST(@thetime AS datetime) AS 'datetime';
Hasil:
+----------+--------------+| waktu | datetime ||----------+-------------------------|| 23:15:59 | 1900-01-01 23:15:59.000 |+----------+-------------------------+Contoh 3 – Konversi Eksplisit menggunakan CONVERT()
Ini sama dengan contoh pertama, kecuali kali ini saya menggunakan
CONVERT()
fungsi alih-alihCAST()
.DECLARE @thetime timeSET @thetime ='23:15:59.004007'SELECT @thetime AS 'time', CONVERT(datetime, @thetime) AS 'datetime';Hasil:
+------------------+-------------------------+| waktu | datetime ||------------------+-------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+-------+------------------- ------+Contoh 4 – Konversi Implisit
Berikut adalah contoh melakukan hal yang sama, tetapi menggunakan konversi tipe implisit.
DECLARE @thetime time, @thedatetime datetimeSET @thetime ='23:15:59.004007'SET @thedatetime =@thetimeSELECT @thetime SEBAGAI 'waktu', @thedatetime SEBAGAI 'datetime';Hasil:
+------------------+-------------------------+| waktu | datetime ||------------------+-------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+-------+------------------- ------+Jadi kami mendapatkan hasil yang sama, terlepas dari apakah itu konversi eksplisit atau implisit.
Ini adalah konversi implisit karena kami tidak menggunakan fungsi konversi untuk mengonversinya secara eksplisit. Kami hanya menetapkan nilai dari variabel satu tipe data ke variabel tipe data lain. Dalam hal ini, SQL Server melakukan konversi implisit di balik layar saat kami mencoba menetapkan waktu nilai ke datetime variabel.
Contoh 5 – Ubah Tanggal
Jika Anda perlu mengubah tanggal (tetapi tetap pada waktu yang sama), Anda dapat menggunakan
DATEADD()
fungsi.DECLARE @thetime time, @thedatetime datetimeSET @thetime ='23:15:59.004007'SET @thedatetime =@thetimeSET @thedatetime =DATEADD(year, 120, @thedatetime)PILIH @thetime SEBAGAI 'waktu', @thedatetime SEBAGAI 'datetime';Hasil:
+------------------+-------------------------+| waktu | datetime ||------------------+-------------------------|| 23:15:59.0040070 | 01-01-2020 23:15:59.003 |+------------------+------------------- ------+Dalam hal ini saya menambahkan 120 ke nilai tahun, yang membawanya ke 2020.