Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách sửa lỗi "dateiff function dẫn đến lỗi tràn" trong SQL Server

Bài viết này cung cấp giải pháp cho sự cố mà đôi khi bạn có thể gặp phải khi sử dụng DATEDIFF() trong SQL Server.

Nếu bạn gặp lỗi sau:

Hàm dateiff dẫn đến lỗi tràn. Số lượng phần ngày tách hai phiên bản ngày / giờ quá lớn. Cố gắng sử dụng dateiff với ngày tháng ít chính xác hơn.

Đó là do giá trị trả về quá lớn. DATEDIFF() hàm trả về kết quả của nó dưới dạng int loại dữ liệu. Lý do bạn nhận được thông báo này là giá trị trả về quá lớn đối với int loại dữ liệu. May mắn thay, có một cách dễ dàng để khắc phục điều này.

Cách nhanh nhất và dễ nhất để khắc phục sự cố này là chuyển sang DATEDIFF_BIG() hàm số. Hàm này hoạt động giống hệt như DATEDIFF() , ngoại trừ việc kiểu dữ liệu trả về của nó là bigint có dấu . Nói cách khác, nó có thể xử lý những con số thực sự lớn.

Ví dụ

Hãy xem nếu DATEDIFF() có thể cho chúng ta biết bao nhiêu mili giây trong một nghìn năm:

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

Kết quả:

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. 

Có thể không. Có vẻ như có quá nhiều mili giây để vừa với một int .

Thời gian cho những khẩu súng lớn. DATEDIFF_BIG() , làm công việc của bạn…

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

Kết quả:

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

Điều đó tốt hơn.

Nếu bạn vẫn nhận được thông báo lỗi ở trên, bạn phải đang cố gắng trả về một thực sự con số lớn. Trong trường hợp đó, bạn cần thực hiện ít nhất một trong những điều sau:

  • Sử dụng một khoảng thời gian ngắn hơn.
  • Sử dụng datepart kém chính xác hơn . Ví dụ:thay vì cố gắng trả về số mili giây, hãy thử chỉ bằng giây.

Cũng lưu ý rằng bạn cần phải chạy ít nhất SQL Server 2016 trước khi có thể sử dụng DATEDIFF_BIG() chức năng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cấp quyền cấp bảng trong SQL Server

  2. Cách khắc phục “Tùy chọn cấu hình‘ Agent XPs ’không tồn tại” trong SQL Server (T-SQL)

  3. NEWID () so với NEWSEQUENTIALID () trong SQL Server:Sự khác biệt là gì?

  4. Kích thước tối đa của một biến varchar (max)

  5. Gọi thủ tục được lưu trữ với giá trị trả về