Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Ubah 'datetimeoffset' menjadi 'datetime2' di SQL Server (Contoh T-SQL)

Artikel ini berisi contoh konversi datetimeoffset nilai ke datetime2 di SQLServer.

Saat Anda mengonversi datetimeoffset nilai ke datetime2 , tanggal dan waktu disalin ke datetime2 nilai, dan zona waktu terpotong. Detik pecahan juga dipotong agar pas jika presisi tujuan lebih rendah.

offset datetime tipe data memungkinkan Anda untuk menentukan presisi pecahan detik dari 0 hingga 7 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, bergantung pada presisi yang digunakan.

datetime2 tipe data juga memungkinkan Anda untuk menentukan presisi pecahan detik dari 0 hingga 7 (menggunakan datetime2(n) sintaksis). Itu tidak memiliki kesadaran zona waktu. Ukuran penyimpanannya adalah 6, 7 atau 8, tergantung pada presisi yang digunakan.

Perhatikan bahwa jumlah penyimpanan yang tercantum di sini adalah jumlah yang tercantum dalam dokumentasi Microsoft. Namun, tipe data ini juga menggunakan 1 byte untuk menyimpan presisi. Oleh karena itu, tambahkan 1 byte ke jumlah yang tercantum di sini untuk gambaran yang lebih lengkap tentang persyaratan penyimpanan.

Contoh 1 – Konversi Implisit

Berikut adalah contoh konversi implisit antara datetimeoffset dan datetime2 .

DECLARE @thedatetimeoffset datetimeoffset, @thedatetime2 datetime2;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SET @thedatetime2 =@thedatetimeoffset;PILIH @thedatetimeoffset SEBAGAI 'datetimeoffset', @thedatetime2 SEBAGAI 'datetime2';

Hasil:

+------------------------------------+--------- --------------------+| datetimeoffset | datetime2 ||------------------------------------+---------- -------------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.1234567 |+------------------------------------+- ----------------------------+

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 datetime2 variabel.

Dalam contoh ini, kedua tipe data menggunakan presisi default (7 tempat desimal). Oleh karena itu, bagian pecahannya adalah 1234567 untuk kedua hasil.

Kami juga melihat bahwa offset zona waktu terpotong – datetime2 tipe data tidak memiliki kesadaran zona waktu.

Dalam konversi ini, ukuran penyimpanan berkurang dari 10 byte (untuk datetimeoffset ) hingga 8 byte (untuk datetime2 ), meskipun perhatikan bahwa 1 byte ditambahkan untuk menyimpan presisi.

Contoh 2 – Presisi Berbeda

Berikut adalah contoh yang menunjukkan apa yang terjadi jika datetime2 value menggunakan presisi yang lebih rendah ke datetimeoffset nilai.

DECLARE @thedatetimeoffset datetimeoffset(7), @thedatetime2 datetime2(3);SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SET @thedatetime2 =@thedatetimeoffset;PILIH @thedatetimeoffset AS 'datetimeoffset', @thedatetime2 SEBAGAI 'datetime2';

Hasil:

+------------------------------------+--------- ----------------+| datetimeoffset | datetime2 ||------------------------------------+---------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.123 |+-----------------------------------+- ------------------------+

Dalam contoh ini, datetimeoffset memiliki skala 7 tapi datetime2 nilai memiliki skala hanya 3 . Oleh karena itu, pecahan detik dipotong agar pas.

Perhatikan bahwa ini dapat menyebabkan pembulatan terjadi. Berikut adalah contoh di mana bagian pecahan dari datetime2 nilainya dibulatkan menjadi 124 .

DECLARE @thedatetimeoffset datetimeoffset(7), @thedatetime2 datetime2(3);SET @thedatetimeoffset ='2025-05-21 10:15:30.1235555 +07:00';SET @thedatetime2 =@thedatetimeoffset;PILIH @thedatetimeoffset AS 'datetimeoffset', @thedatetime2 SEBAGAI 'datetime2';

Hasil:

+------------------------------------+--------- ----------------+| datetimeoffset | datetime2 ||------------------------------------+---------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.124 |+-----------------------------------+- ------------------------+

Contoh 3 – 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 datetime2 .

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';PILIH @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS datetime2) SEBAGAI 'datetime2'; 

Hasil:

+------------------------------------+--------- --------------------+| datetimeoffset | datetime2 ||------------------------------------+---------- -------------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.1234567 |+------------------------------------+- ----------------------------+

Contoh 4 – Konversi Eksplisit menggunakan CONVERT()

Berikut adalah contoh konversi eksplisit menggunakan CONVERT() fungsi alih-alih CAST() .

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';PILIH @thedatetimeoffset SEBAGAI 'datetimeoffset', CONVERT(datetime2, @thedatetimeoffset) SEBAGAI 'datetime2'; 

Hasil:

+------------------------------------+--------- --------------------+| datetimeoffset | datetime2 ||-------------------------+---------- -------------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.1234567 |+------------------------------------+- ----------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Query Where Column ='' mengembalikan karakter Emoji dan

  2. Bagaimana cara mengecualikan catatan dengan nilai tertentu di sql pilih

  3. Memindahkan Tabel SQL Server ke Filegroup Berbeda

  4. Dapatkan baris sebelumnya dan berikutnya dari baris yang dipilih dengan kondisi (WHERE)

  5. 10 FAQ Teratas Tentang Pemantauan Kinerja SQL Server