Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak naprawić błąd „funkcja datediff spowodowała przepełnienie” w SQL Server

Ten artykuł zawiera rozwiązanie problemu, który możesz czasami napotkać podczas korzystania z DATEDIFF() funkcja w SQL Server.

Jeśli napotkasz następujący błąd:

Funkcja datediff spowodowała przepełnienie. Liczba części daty oddzielających dwa wystąpienia daty/godziny jest zbyt duża. Spróbuj użyć datediff z mniej dokładną częścią daty.

Dzieje się tak, ponieważ zwracana wartość jest zbyt duża. DATEDIFF() funkcja zwraca swój wynik jako int typ danych. Powodem otrzymania tej wiadomości jest to, że zwracana wartość jest zbyt duża dla int typ danych. Na szczęście istnieje prosty sposób, aby to naprawić.

Najszybszym i najłatwiejszym sposobem rozwiązania tego problemu jest przejście na DATEDIFF_BIG() funkcjonować. Ta funkcja działa dokładnie tak jak DATEDIFF() , z wyjątkiem tego, że zwracany typ danych to podpisany bigin . Innymi słowy, radzi sobie z naprawdę dużymi liczbami.

Przykład

Zobaczmy, czy DATEDIFF() może nam powiedzieć, ile milisekund przypada na tysiąc lat:

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

Wynik:

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. 

Może nie. Wygląda na to, że jest zbyt wiele milisekund, aby zmieścić się w int .

Czas na wielkie działa. DATEDIFF_BIG() , rób swoje…

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

Wynik:

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

Tak jest lepiej.

Jeśli nadal otrzymujesz powyższy komunikat o błędzie, musisz spróbować zwrócić naprawdę duża liczba. W takim przypadku musisz wykonać co najmniej jedną z następujących czynności:

  • Użyj krótszego okresu.
  • Użyj mniej dokładnej części daty . Na przykład, zamiast zwracać liczbę milisekund, wypróbuj tylko sekundy.

Pamiętaj też, że aby użyć DATEDIFF_BIG(), musisz mieć co najmniej SQL Server 2016 funkcja.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odpowiednik C# typów danych SQL Server

  2. Jak @@MAX_CONNECTIONS działa w SQL Server

  3. Najszybszy sposób wykonywania zagnieżdżonych wstawek zbiorczych z użyciem scope_identity()?

  4. Jak przywrócić bazę danych SQL Server na komputerze Mac za pomocą programu SQL Operations Studio

  5. Konwertuj wartość tekstową w SQL Server z UTF8 na ISO 8859-1