Artikel ini berisi contoh konversi datetimeoffset nilai ke smalldatetime di SQLServer.
Saat Anda mengonversi datetimeoffset nilai ke smalldatetime , tanggal dan jam disalin. Menit dibulatkan ke atas (bergantung pada nilai detik) dan detik disetel ke 0.
offset datetime tipe data memungkinkan Anda untuk menentukan presisi pecahan detik dari 0 hingga 7. Hal ini dilakukan dengan menggunakan datetimeoffset(n)
sintaksis. Jika Anda tidak menentukan ini, itu akan menggunakan 7 (default). Ini juga memiliki offset zona waktu. Ukuran penyimpanan tipe data ini adalah 8, 9, atau 10 byte (ditambah 1 byte untuk presisi), bergantung pada presisi yang digunakan.
waktu kecil tipe data di sisi lain, tidak memiliki kesadaran zona waktu, dan oleh karena itu, tidak termasuk offset zona waktu apa pun. Itu juga tidak memiliki pecahan detik, dan komponen detiknya selalu disetel ke nol (:00). Akurasinya sampai menit terdekat. Ukuran penyimpanan tipe data ini ditetapkan pada 4 byte.
Contoh 1 – Konversi Implisit
Berikut adalah contoh konversi implisit antara datetimeoffset dan waktu kecil .
DECLARE @thedatetimeoffset datetimeoffset, @thesmalldatetime smalldatetime;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SET @thesmalldatetime =@thedatetimeoffset;PILIH @thedatetimeoffset SEBAGAI 'datetimeoffset', @thesmalldatetime SEBAGAI 'smalldatetime';
Hasil:
+------------------------------------+--------- ------------+| datetimeoffset | smalldatetime ||------------------------------------+---------- -----------|| 2025-05-21 10:15:30.1234567 +07:00 | 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 datetimeoffset nilai ke waktu kecil variabel.
Kita dapat melihat bahwa waktu kecil variabel tidak memiliki presisi pecahan detik, dan detiknya telah disetel ke nol. Juga, menit telah dibulatkan, karena fakta bahwa nilai aslinya memiliki nilai detik 30.
Pengamatan lain adalah bahwa offset zona waktu terpotong – waktu kecil tipe data tidak memiliki kesadaran zona waktu.
Dalam konversi ini, ukuran penyimpanan telah berkurang dari 10 byte (11 byte saat Anda menghitung presisi) untuk datetimeoffset , menjadi 4 byte untuk smalldatetime .
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 mengonversi antara datetimeoffset dan waktu kecil .
DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';PILIH @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS smalldatetime) SEBAGAI 'smalldatetime';Hasil:
+------------------------------------+--------- ----------------+| datetimeoffset | smalldatetime ||------------------------------------+---------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 |+------------------------------------+- ------------------------+Contoh 3 – Konversi Eksplisit menggunakan CONVERT()
Berikut adalah contoh konversi eksplisit menggunakan
CONVERT()
fungsi alih-alihCAST()
.DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';PILIH @thedatetimeoffset SEBAGAI 'datetimeoffset', CONVERT(smalldatetime, @thedatetimeoffset) SEBAGAI 'smalldatetime';Hasil:
+------------------------------------+--------- ----------------+| datetimeoffset | smalldatetime ||-------------------------+---------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 |+------------------------------------+- ------------------------+