Artikel ini berisi contoh mengonversi waktu tanggal nilai untuk waktu nilai di SQL Server.
Salah satu manfaat mengonversi waktu tanggal nilai untuk waktu adalah Anda mengurangi ukuran penyimpanan dari 8 byte, menjadi 3, 4, atau 5 byte (bergantung pada presisi yang Anda gunakan untuk waktu nilai). Sebenarnya, waktu menggunakan 4, 5, atau 6 byte, karena byte tambahan digunakan untuk menyimpan presisinya.
Saat Anda mengonversi waktu tanggal nilai untuk waktu , hanya bagian waktu dari nilai yang disalin. Hasil persisnya akan bergantung pada presisi pecahan detik yang Anda tetapkan ke waktu . Ketika waktu presisi kurang dari datetime presisi, pecahan detik dibulatkan agar sesuai dengan waktu presisi.
waktu kencan tipe data memiliki maksimal 3 digit untuk bagian pecahan detik. Akurasinya dibulatkan menjadi .000, .003, atau .007 detik.
Waktu tipe data, di sisi lain, memungkinkan Anda untuk menentukan presisi pecahan detik dari 0 hingga 7. Ini dicapai dengan menggunakan waktu(n ) sintaks, di mana n adalah skala dari 0 hingga 7. Jika Anda tidak menentukan ini, ini akan menggunakan 7, yang memberikan akurasi 100 nanodetik.
Contoh 1 – Konversi Implisit
Berikut adalah contoh konversi implisit antara waktu-tanggal dan waktu .
DECLARE @thedatetime datetime, @thetime time; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'time';
Hasil:
+-------------------------+------------------+ | datetime | time | |-------------------------+------------------| | 2025-05-21 10:15:30.123 | 10:15:30.1233333 | +-------------------------+------------------+
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 waktu tanggal nilai untuk waktu variabel.
Hal yang paling jelas tentang hasil ini adalah waktu nilai tidak termasuk tanggal. Ini sudah diduga, karena waktu tipe data hanya untuk menyimpan nilai waktu, bukan nilai tanggal.
Kita juga dapat melihat bahwa waktu variabel memiliki presisi pecahan detik yang lebih banyak, dan kami berakhir dengan bagian pecahan 1233333 (vs 123 untuk waktu kencan nilai). Ini terjadi karena waktu value menggunakan skala default 7 (karena kami tidak secara eksplisit menentukan skala).
Contoh 2 – Pembulatan
waktu kencan tipe data dibulatkan menjadi kelipatan .000, .003, atau .007 detik. Bahkan jika Anda secara eksplisit mengaturnya ke nilai lain, itu akan dibulatkan.
Ini contohnya:
DECLARE @thedatetime datetime, @thetime time; SET @thedatetime = '2025-05-21 10:15:30.125'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'thetime';
Hasil:
+-------------------------+------------------+ | datetime | thetime | |-------------------------+------------------| | 2025-05-21 10:15:30.127 | 10:15:30.1266667 | +-------------------------+------------------+
Dalam contoh ini, saya mengatur pecahan detik ke 125
tapi waktu kencan dibulatkan menjadi
127
(karena hanya dapat dibulatkan menjadi kelipatan .000, .003, atau .007 detik).
Waktu namun, atur pecahan detik ke 1266667 .
Jika kita cukup menyetel nilai awal ke waktu pertama-tama, bagian pecahannya akan mengembalikan 1250000 .
Contoh 3 – Presisi/Akurasi
Seperti yang disebutkan, waktu tipe data memungkinkan Anda untuk menentukan presisi pecahan detik. Jika Anda tidak melakukan ini, ia menggunakan 7 (oleh karena itu, contoh sebelumnya menggunakan 7).
Anda dapat memodifikasi ini dengan menggunakan waktu(n ) sintaksis. Oleh karena itu, saya dapat menggunakan waktu(7) untuk contoh sebelumnya untuk mendapatkan hasil yang sama.
Dalam contoh ini, saya menghapus pecahan detik sama sekali dengan menggunakan time(0) :
DECLARE @thedatetime datetime, @thetime time(0); SET @thedatetime = '2025-05-21 10:15:30.125'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'time';
Hasil:
+-------------------------+----------+ | datetime | time | |-------------------------+----------| | 2025-05-21 10:15:30.127 | 10:15:30 | +-------------------------+----------+
Saat kami melakukan ini, ukuran penyimpanan waktu nilai dikurangi menjadi 3 byte (4 byte termasuk presisi) dibandingkan dengan 8 byte untuk datetime nilai.
Ketahuilah bahwa menggunakan presisi yang lebih rendah daripada nilai aslinya akan menyebabkan hasil dibulatkan ke atas agar sesuai dengan presisi yang ditentukan.
Contoh:
DECLARE @thedatetime datetime, @thetime time(0); SET @thedatetime = '2025-05-21 10:15:30.525'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'time';
Hasil:
+-------------------------+----------+ | datetime | time | |-------------------------+----------| | 2025-05-21 10:15:30.527 | 10:15:31 | +-------------------------+----------+
Contoh 4 – Konversi Eksplisit menggunakan CAST()
Berikut ini contoh konversi eksplisit. Dalam hal ini, saya menggunakan CAST()
berfungsi langsung di dalam SELECT
pernyataan untuk secara eksplisit mengkonversi antara datetime dan waktu .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS time(0)) AS 'time(0)';
Hasil:
+-------------------------+-----------+ | datetime | time(0) | |-------------------------+-----------| | 2025-05-21 10:15:30.127 | 10:15:30 | +-------------------------+-----------+
Contoh 5 – Konversi Eksplisit menggunakan CONVERT()
Berikut adalah contoh konversi eksplisit menggunakan CONVERT()
fungsi alih-alih CAST()
.
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(time(0), @thedatetime) AS 'time(0)';
Hasil:
+-------------------------+-----------+ | datetime | time(0) | |-------------------------+-----------| | 2025-05-21 10:15:30.127 | 10:15:30 | +-------------------------+-----------+