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

Cara Memperbaiki Kesalahan "fungsi datediff mengakibatkan overflow" di SQL Server

Artikel ini memberikan solusi untuk masalah yang terkadang Anda alami saat menggunakan DATEDIFF() fungsi di SQL Server.

Jika Anda mengalami kesalahan berikut:

Fungsi dateiff menghasilkan overflow. Jumlah bagian tanggal yang memisahkan dua contoh tanggal/waktu terlalu besar. Coba gunakan dateiff dengan bagian tanggal yang kurang tepat.

Itu karena nilai pengembaliannya terlalu besar. DATEDIFF() fungsi mengembalikan hasilnya sebagai int tipe data. Alasan Anda mendapatkan pesan ini adalah karena nilai yang dikembalikan terlalu besar untuk int tipe data. Untungnya ada cara mudah untuk memperbaikinya.

Cara tercepat dan termudah untuk memperbaiki masalah ini adalah dengan beralih ke DATEDIFF_BIG() fungsi. Fungsi ini bekerja persis seperti DATEDIFF() , kecuali bahwa tipe data pengembaliannya adalah besar . yang ditandatangani . Dengan kata lain, ini dapat menangani jumlah yang sangat besar.

Contoh

Mari kita lihat apakah DATEDIFF() dapat memberi tahu kami berapa milidetik dalam seribu tahun:

SELECT DATEDIFF( 
    millisecond, 
    SYSDATETIME(), 
    DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';

Hasil:

The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart. 

Mungkin tidak. Tampaknya ada terlalu banyak milidetik untuk dimasukkan ke dalam int .

Waktu untuk senjata besar. DATEDIFF_BIG() , kerjakan tugasmu…

SELECT DATEDIFF_BIG( 
    millisecond, 
    SYSDATETIME(), 
    DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';  

Hasil:

Milliseconds in 1000 years
--------------------------
31556908800000            

Itu lebih baik.

Jika Anda masih mendapatkan pesan kesalahan di atas, Anda harus mencoba mengembalikan sungguh jumlah besar. Dalam hal ini, Anda harus melakukan setidaknya salah satu dari yang berikut:

  • Gunakan jangka waktu yang lebih singkat.
  • Gunakan datepart yang kurang tepat . Misalnya, daripada mencoba mengembalikan jumlah milidetik, cobalah hanya dalam hitungan detik.

Perhatikan juga bahwa Anda harus menjalankan setidaknya SQL Server 2016 sebelum dapat menggunakan DATEDIFF_BIG() fungsi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sintaks untuk baris tunggal MERGE/upsert di SQL Server

  2. Terhubung ke Database MSSQL menggunakan Flask-SQLAlchemy

  3. Ketergantungan SQL Server

  4. Kebiasaan Buruk:Menghindari NULL di SQL Server

  5. SQL Server 2005 Menggunakan DateAdd untuk menambahkan hari ke tanggal