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

Konversi 'datetime' menjadi 'datetime2' di SQL Server (Contoh T-SQL)

Artikel ini berisi contoh mengonversi waktu tanggal nilai ke datetime2 nilai di SQL Server.

Saat Anda mengonversi waktu tanggal nilai ke datetime2 , nilai yang dihasilkan akan bergantung pada presisi pecahan detik yang Anda tetapkan ke datetime2 .

waktu kencan tipe data memiliki maksimal 3 digit untuk bagian pecahan detik. Akurasinya dibulatkan menjadi .000, .003, atau .007 detik.

datetime2 tipe data, di sisi lain, memungkinkan Anda untuk menentukan presisi pecahan detik dari 0 hingga 7. Jika Anda tidak menentukan ini, itu akan menggunakan 7 (default).

Contoh 1 – Konversi Implisit

Berikut adalah contoh konversi implisit antara waktu-tanggal dan datetime2 .

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2;
SET @thedatetime = '2025-05-21 10:15:30.123';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

Hasil:

+-------------------------+-----------------------------+
| datetime                | datetime2                   |
|-------------------------+-----------------------------|
| 2025-05-21 10:15:30.123 | 2025-05-21 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 ke datetime2 variabel.

Kita dapat melihat bahwa datetime2 variabel memiliki presisi pecahan detik yang lebih banyak, dan kami berakhir dengan bagian pecahan 1233333 (vs 123 untuk waktu kencan nilai).

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. Seperti yang Anda duga, ini dapat menyebabkan banyak kebingungan jika Anda tidak mengetahui cara kerjanya. Tidak hanya dapat menyebabkan kebingungan saat menggunakan datetime dengan sendirinya, ini dapat menyebabkan kebingungan ekstra saat mengonversi nilai tersebut ke tipe data lain.

Berikut adalah contoh yang menunjukkan apa yang saya maksud.

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2;
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

Hasil:

+-------------------------+-----------------------------+
| datetime                | datetime2                   |
|-------------------------+-----------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 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).

datetime2 namun, atur pecahan detik ke 1266667 .

Omong-omong, jika kita cukup menyetel nilai awal ke datetime2 pertama-tama, bagian pecahannya akan mengembalikan 1250000 .

Contoh 3 – Presisi/Akurasi

Salah satu manfaat datetime2 adalah memungkinkan Anda untuk menentukan presisi pecahan detik. Jika Anda tidak melakukan ini, ia menggunakan 7 (oleh karena itu, contoh sebelumnya menggunakan 7).

Oleh karena itu, kita dapat memodifikasi contoh sebelumnya sehingga datetime2 nilai menggunakan presisi pecahan detik yang sama dengan waktu tanggal tipe data.

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2(3);
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

Hasil:

+-------------------------+-------------------------+
| datetime                | datetime2               |
|-------------------------+-------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
+-------------------------+-------------------------+

Saat kita melakukan ini, datetime2 value mengembalikan hasil yang sama dengan datetime nilai. Itu juga menggunakan jumlah penyimpanan yang sama (8 byte). Dalam hal ini, datetime2 menggunakan 7 byte untuk menyimpan nilai, dan 1 byte untuk menyimpan ketepatan nilai.

Anda bahkan dapat menentukan kurang presisi pecahan detik dari datetime jika Anda tidak membutuhkan presisi ekstra. Melakukan hal ini akan menghemat satu byte penuh pada ruang penyimpanan (datetime2your Anda value akan menggunakan 7 byte, dibandingkan dengan 8 byte untuk datetime nilai).

DECLARE 
  @thedatetime datetime, 
  @thedatetime2 datetime2(2);
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thedatetime2 = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thedatetime2 AS 'datetime2';

Hasil:

+-------------------------+------------------------+
| datetime                | datetime2              |
|-------------------------+------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.13 |
+-------------------------+------------------------+

Ingatlah bahwa ini juga dapat mengakibatkan pecahan detik dibulatkan.

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

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CAST(@thedatetime AS datetime2(3)) AS 'datetime2(3)';

Hasil:

+-------------------------+-------------------------+
| datetime                | datetime2(3)            |
|-------------------------+-------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
+-------------------------+-------------------------+

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(datetime2(3), thedatetime) AS 'datetime2(3)';

Hasil:

+-------------------------+-------------------------+
| datetime                | datetime2(3)            |
|-------------------------+-------------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
+-------------------------+-------------------------+

Rekomendasi Microsoft

Microsoft merekomendasikan penggunaan casting eksplisit setiap kali skenario perbandingan campuran antara dua tipe data ini ada:

Di bawah tingkat kompatibilitas database 130, konversi implisit dari datetime ke datetime2 tipe data menunjukkan peningkatan akurasi dengan menghitung milidetik pecahan, menghasilkan nilai konversi yang berbeda… Gunakan casting eksplisit ke datetime2 tipe data setiap kali skenario perbandingan campuran antara datetime dan datetime2 tipe data ada.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tablix:Ulangi baris tajuk pada setiap halaman tidak berfungsi - Pembuat Laporan 3.0

  2. Perbarui Profil Email Database di SQL Server (T-SQL)

  3. Desain database:satu tabel besar atau tabel terpisah?

  4. Bisakah kita meneruskan parameter ke tampilan di SQL?

  5. Cara Membangun Kembali Basis Data Master di SQL Server dengan Mudah