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

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

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

Salah satu manfaat mengonversi datetime2 nilai untuk waktu adalah Anda mengurangi ukuran penyimpanan dari antara 6 dan 8 byte, turun menjadi antara 3 dan 5 byte (bergantung pada presisi yang telah ditetapkan oleh setiap tipe data). Sebenarnya, 1 byte tambahan digunakan untuk menyimpan presisi untuk tipe data ini, jadi Anda harus menambahkan 1 byte ke jumlah ini.

Jelas, Anda kehilangan bagian tanggal selama konversi, tetapi Anda tidak akan melakukan konversi ini jika Anda perlu mempertahankan bagian tanggal.

Saat Anda mengonversi datetime2 nilai untuk waktu , hanya bagian waktu dari nilai yang disalin. Hasil yang tepat akan tergantung pada presisi pecahan detik yang ditetapkan untuk setiap jenis. Ketika waktu presisi kurang dari datetime2 presisi, pecahan detik dibulatkan agar sesuai dengan waktu presisi.

Mengenai presisi, kedua tipe data memungkinkan Anda untuk menentukan skala dari 0 tempat desimal hingga 7. Oleh karena itu, Anda memiliki kemampuan untuk melakukan konversi tanpa kehilangan pecahan detik atau hasil yang dibulatkan.

Contoh 1 – Konversi Implisit

Berikut adalah contoh konversi implisit antara datetime2 dan waktu .

DECLARE @thedatetime2 datetime2, @thetime time;SET @thedatetime2 ='2025-05-21 10:15:30.1234567';SET @thetime =@thedatetime2;PILIH @thedatetime2 SEBAGAI 'datetime2', @waktu SEBAGAI 'waktu';

Hasil:

+-----------------------------+---------------- --+| datetime2 | waktu ||-----------------------------+----------------- -|| 2025-05-21 10:15:30.1234567 | 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 datetime2 nilai untuk waktu variabel.

Hal yang paling jelas dari hasil ini adalah waktu nilai tidak termasuk tanggal. Ini sudah diduga, karena waktu tipe data hanya untuk menyimpan nilai waktu, bukan nilai tanggal.

Juga, dalam contoh ini, kedua tipe data menggunakan presisi default (yang merupakan skala 7). Ini berarti waktu nilai berakhir dengan presisi yang sama dengan datetime2 nilai. Alasan saya tahu mereka menggunakan presisi default adalah karena saya tidak menentukan skala pecahan kedua saat mendeklarasikannya.

Contoh 2 – Konversi ke Presisi yang Lebih Tinggi

Dalam contoh ini waktu variabel menggunakan presisi yang lebih tinggi ke datetime2 variabel.

DECLARE @thedatetime2 datetime2(4), @thetime time(7);SET @thedatetime2 ='2025-05-21 10:15:30.1234567';SET @thetime =@thedatetime2;PILIH @thedatetime2 SEBAGAI 'datetime2', @thetime SEBAGAI 'waktu';

Hasil:

+--------------------------+------------------+ | datetime2 | waktu ||--------------------------+------------------|| 2025-05-21 10:15:30.1235 | 10:15:30.1235000 |+--------------------------+---------------- --+

Dalam hal ini datetime2 variabel menggunakan skala 4, dan waktu variabel menggunakan 7.

Ini menghasilkan datetime2 membulatkan pecahan detik, jadi kita mendapatkan 1235 bukannya 1234 . Ini juga berarti bahwa ketika kita mengubahnya menjadi waktu , nilainya berakhir dengan 3 angka nol (karena kami menetapkan skala 7). Ini juga berarti bahwa waktu ukuran penyimpanan nilai adalah 5 byte (6 termasuk presisi) dibandingkan dengan 4 byte (5 termasuk presisi) jika kita memberinya skala 4.

Contoh 3 – Konversi ke Presisi Lebih Rendah

Dalam contoh ini waktu variabel menggunakan presisi yang lebih rendah ke datetime2 variabel.

DECLARE @thedatetime2 datetime2(7), @thetime time(0);SET @thedatetime2 ='2025-05-21 10:15:30.5678912';SET @thetime =@thedatetime2;PILIH @thedatetime2 SEBAGAI 'datetime2', @thetime SEBAGAI 'waktu';

Hasil:

+-----------------------------+----------+| datetime2 | waktu ||-----------------------------+----------|| 2025-05-21 10:15:30.5678912 | 10:15:31 |+-----------------------------+----------+ 

Jadi dalam hal ini waktu skala dikurangi menjadi 0, yang berarti tidak ada pecahan detik yang disertakan dalam hasil. Juga, detik dibulatkan ke atas.

Waktu value menggunakan penyimpanan 4 byte (termasuk presisi), dibandingkan dengan 9 byte untuk datetime2 nilai (dan dibandingkan dengan 6 byte untuk waktu nilai pada contoh sebelumnya).

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 mengonversi antara datetime2 dan waktu .

DECLARE @thedatetime2 datetime2(3);SET @thedatetime2 ='2025-05-21 10:15:30.123';PILIH @thedatetime2 AS 'datetime2', CAST(@thedatetime2 AS time(0)) AS 'time( 0)';

Hasil:

+-------------------------+------------+| datetime2 | waktu(0) ||--------------+------------|| 25-05-21 10:15:30.123 | 10:15:30 |+--------------+-----------+

Contoh 5 – Konversi Eksplisit menggunakan CONVERT()

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

DECLARE @thedatetime2 datetime2(3);SET @thedatetime2 ='2025-05-21 10:15:30.123';SELECT @thedatetime2 AS 'datetime2', CONVERT(time(0), @thedatetime2) AS 'time( 0)';

Hasil:

+-------------------------+------------+| datetime2 | waktu(0) ||--------------+------------|| 25-05-21 10:15:30.123 | 10:15:30 |+--------------+-----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah Kolom yang Ada menjadi Kolom Terhitung di SQL Server (Contoh T-SQL)

  2. Cara terbaik untuk melakukan logika pernyataan kasus bersarang di SQL Server

  3. Pengemudi tidak dapat membuat sambungan aman ke SQL Server dengan menggunakan enkripsi Secure Sockets Layer (SSL)

  4. Bagaimana menjalankan Prosedur Tersimpan dari Laravel

  5. Bagaimana cara mengambil desimal saat membulatkan rata-rata dalam SQL