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

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

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

waktu kecil tipe data tidak memiliki pecahan detik, dan komponen detiknya selalu disetel ke nol (:00). Akurasinya sampai menit terdekat.

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). Jika Anda menentukan nol (0 ), akurasinya akan mendekati detik terdekat.

Saat Anda mengonversi waktu kecil nilai ke datetime2 , jam dan menit disalin. Detik dan detik pecahan disetel ke 0.

Contoh 1 – Konversi Implisit

Berikut adalah contoh konversi implisit antara smalldatetime dan datetime2 .

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Hasil:

+---------------------+-----------------------------+
| smalldatetime       | datetime2                   |
|---------------------+-----------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.0000000 |
+---------------------+-----------------------------+

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 smalldatetime nilai ke datetime2 variabel.

Dalam contoh ini kita dapat melihat bahwa smalldatetime nilai tidak termasuk pecahan detik, detik telah disetel ke nol, dan menit telah dibulatkan.

Dalam hal ini, datetime2 nilai menggunakan presisi 7. Ini karena 7 adalah nilai default. Saya tidak menentukan presisi dan oleh karena itu nilai default digunakan. Ini menghasilkan 7 nol yang digunakan di bagian pecahan.

Contoh 2 – Hapus Bagian Pecahan

Anda dapat menghapus pecahan detik jika diperlukan. Untuk melakukannya, cukup gunakan datetime2(0) saat mendeklarasikan variabel.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Hasil:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

Jadi dalam hal ini kedua tipe data mengembalikan nilai yang sama. Namun, perbedaannya adalah datetime2 memiliki kemampuan untuk memberikan akurasi hingga detik (dibandingkan dengan smalldatetime akurasi hingga menit).

Contoh:

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  DATEADD(second, 30, @thesmalldatetime) AS 'smalldatetime',
  DATEADD(second, 30, @thedatetime2) AS 'datetime2';

Hasil:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:17:00 | 2025-05-21 10:16:30 |
+---------------------+---------------------+

Dalam contoh ini saya menggunakan DATEADD() berfungsi untuk menambahkan 30 detik ke setiap nilai. Namun, setiap tipe data mengembalikan hasil yang berbeda. datetime2 tipe data menghormati bagian detik dan memberikan hasil yang benar dengan akurasi 100%. waktu kecil ketik di sisi lain, dibulatkan ke menit terdekat (sementara bagian detik tetap nol).

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

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime2(0)) AS 'datetime2(0)';

Hasil:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

Contoh 4 – Konversi Eksplisit menggunakan CONVERT()

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

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime2(0), @thesmalldatetime) AS 'datetime2(0)';

Hasil:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menggunakan Logika JIKA... MAKA di SQL Server

  2. Apa Tujuan Replikasi Data?

  3. Dapatkan tanggal mulai minggu dan tanggal akhir minggu dari nomor minggu

  4. Gunakan OBJECTPROPERTY() untuk Mengetahui apakah Tabel adalah Tabel Sistem di SQL Server

  5. Konkurensi optimis:IsConcurrencyToken dan RowVersion