Artikel ini berisi contoh mengonversi tanggal nilai ke datetimeoffset nilai di SQL Server.
Saat Anda mengonversi tanggal nilai ke datetimeoffset , informasi tambahan ditambahkan ke nilai. Ini karena datetimeoffset tipe data berisi informasi tanggal dan waktu, serta informasi offset waktu. Dengan kata lain, datetimeoffset tipe data mendefinisikan tanggal yang digabungkan dengan waktu dalam sehari yang memiliki kesadaran zona waktu dan didasarkan pada jam 24 jam. Tanggal tipe data, di sisi lain, hanya berisi informasi tanggal.
Saat kami mengonversi dari tanggal ke datetimeoffset , waktu (dan offset zona waktu) secara otomatis ditambahkan ke nilai. Namun, Anda selalu dapat mengubah nilainya jika diperlukan (termasuk offset zona waktu).
offset datetime tipe data juga memungkinkan Anda untuk menentukan presisi pecahan detik. Jika Anda tidak menentukan ini, ini menggunakan skala 7. Ini berarti akan menyertakan 7 digit di sisi kanan titik desimal.
Contoh 1 – Konversi Implisit
Berikut adalah contoh konversi implisit antara tanggal dan datetimeoffset .
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Hasil:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00: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 tanggal nilai ke datetimeoffset variabel.
Kita dapat melihat bahwa tanggal variabel hanya berisi informasi tanggal, sedangkan datetimeoffset variabel berisi informasi offset tanggal, waktu, dan zona waktu.
Saat Anda mengonversi antara tanggal dan datetimeoffset(7) (yaitu menggunakan skala 7), komponen waktu diatur ke 00:00:00.0000000 +00:00
. Ini juga merupakan nilai default, sehingga Anda dapat menghilangkan nilai presisi dan akan menggunakan skala 7 (yang menghasilkan presisi 34). Anda dapat mengurangi presisi jika Anda mau. Mengurangi presisi juga dapat mengurangi jumlah ruang yang diperlukan untuk menyimpan nilai.
Untuk memperjelas, skala adalah jumlah digit di sebelah kanan titik desimal dalam suatu bilangan. Presisi adalah jumlah total digit dalam nomor tersebut.
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 tanggal dan datetimeoffset .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetimeoffset) AS 'datetimeoffset';
Hasil:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
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, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';
Hasil:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Perhatikan bahwa Anda tidak dapat menggunakan DATEADD()
berfungsi untuk memodifikasi komponen offset waktu. Tapi jangan khawatir, ada ada cara untuk memodifikasinya (baca terus untuk mengetahui caranya).
Contoh 3 – 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(datetimeoffset, @thedate) AS 'datetimeoffset';
Hasil:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
Dan menyesuaikan waktu:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CONVERT(datetimeoffset, @thedate)) AS 'datetimeoffset';
Hasil:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Contoh 4 – Memodifikasi Time Offset
Pada contoh sebelumnya kami menggunakan DATEADD()
berfungsi untuk mengubah nilai waktu. Fungsi ini dapat digunakan untuk mengubah bagian mana pun dari komponen tanggal atau waktu, kecuali komponen offset waktu .
Jika Anda perlu mengubah offset waktu, Anda dapat menggunakan TODATETIMEOFFSET()
fungsi. Anda juga dapat menggunakan fungsi ini untuk mengonversi tanggal asli nilai ke datetimeoffset nilai. Fungsi ini menerima nilai tanggal (yang dapat diselesaikan menjadi datetime2 nilai), dan nilai offset.
Ini contohnya:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset SET @thedate = '2020-12-01' SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00') SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Hasil:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
Dan inilah contoh penggunaan fungsi di dalam SELECT
pernyataan:
DECLARE @thedate date = '2020-12-01' SELECT @thedate AS 'date', TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';
Hasil:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
TODATETIMEOFFSET()
fungsi juga menerima datetimeoffset value sebagai parameter pertamanya, jadi Anda juga dapat menggunakannya untuk mengubah datetimeoffset nilai jika diperlukan.
Contoh:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset', TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';
Hasil:
+------------+------------------------------------+------------------------------------+ | date | datetimeoffset | Modified | |------------+------------------------------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+------------------------------------+