Artikel ini berisi contoh mengonversi waktu tanggal nilai ke waktu kecil nilai di SQL Server.
Salah satu manfaat mengonversi waktu tanggal nilai ke smalldatetime adalah Anda mengurangi ukuran penyimpanan dari 8 byte menjadi 4 byte. Namun, Anda kehilangan presisi untuk melakukannya.
waktu kencan tipe data mencakup bagian detik pecahan 3 digit. Akurasinya dibulatkan menjadi .000, .003, atau .007 detik.
waktu kecil tipe data di sisi lain, tidak memiliki pecahan detik, dan komponen detiknya selalu disetel ke nol (:00). Selain itu, akurasinya hanya sampai menit terdekat.
Saat Anda mengonversi waktu tanggal nilai ke smalldatetime , tanggal dan bagian dari porsi waktu disalin. Komponen detik disetel ke nol (terlepas dari nilai aslinya) dan waktu dibulatkan ke menit terdekat. Setiap detik pecahan dihapus.
Contoh 1 – Konversi Implisit
Berikut adalah contoh konversi implisit antara waktu-tanggal dan waktu kecil .
DECLARE @thedatetime datetime, @thesmalldatetime smalldatetime; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thesmalldatetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thesmalldatetime AS 'smalldatetime';
Hasil:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.123 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
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 ke waktu kecil variabel.
Dalam contoh ini kita dapat melihat bahwa smalldatetime nilai tidak termasuk pecahan detik, detik telah disetel ke nol, dan menit telah dibulatkan.
Contoh 2 – 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 kecil .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';
Hasil:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Anda mungkin telah memperhatikan bahwa dalam contoh ini saya mengubah pecahan detik saat menetapkan nilai awal ke @thedatetime
. Tetapi karena saya menetapkannya ke datetime tipe data, bagian pecahan detik dibulatkan ke atas (karena akurasinya dibulatkan menjadi kelipatan .000, .003, atau .007 detik). Dalam hal ini saya mencoba untuk menetapkan pecahan detik 125
tapi dibulatkan menjadi 127
.
Namun, ini tidak memengaruhi waktu kecil nilai.
Contoh 3 – 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(smalldatetime, @thedatetime) AS 'smalldatetime';
Hasil:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+