Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

DATEDIFF_BIG() Примери в SQL Server

В SQL Server можете да използвате DATEDIFF_BIG() функция вместо DATEDIFF() функция, ако очаквате върнатата стойност да бъде наистина голяма. Например, ако се опитвате да разберете колко милисекунди са на 1000 години, ще получите грешка.

Това е така, защото DATEDIFF() връща int тип данни и резултатът е твърде голям, за да може този тип данни да се обработва. От друга страна, DATEDIFF_BIG() функцията връща подписан bigint тип данни, което означава, че можете да го използвате за връщане на много по-големи стойности. С други думи, можете да използвате с много по-голям диапазон от дати.

Освен това, всъщност няма разлика между двете функции.

Статията предоставя примери за използване на DATEDIFF_BIG() функция в SQL Server.

Синтаксис

Първо, ето синтаксиса:

DATEDIFF_BIG ( datepart , startdate , enddate )

Където datepart е частта от датата, която искате да сравните. начална дата е първата и крайната дата е крайната дата.

Функцията изважда начална дата от крайна дата .

Начинът, по който работи е, че връща броя (като подписана голяма целочислена стойност) на посочения datepart прекосени граници между посочената начална дата и крайна дата .

Това е точно същият синтаксис, който се използва с DATEDIFF() функция.

Пример 1

Това е основен пример за демонстриране как работи.

SELECT DATEDIFF_BIG(day, '0001-01-01', '9002-01-01') AS Result;

Резултат:

+----------+
| Result   |
|----------|
| 3287547  |
+----------+

Имайте предвид, че в този случай бихме могли да използваме DATEDIFF() , тъй като резултатът не е твърде голям за цяло число.

Пример 2

Ето пример, в който връщаме разликата на различни части от дати от две дати. В този случай декларирам две променливи и им присвоявам две различни дати (използвам DATEADD() функция за добавяне на 1000 години към първата дата):

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(year, 1000, @date1);
SELECT 
    DATEDIFF_BIG( year, @date1, @date2 ) AS Years,
    DATEDIFF_BIG( quarter, @date1, @date2 ) AS Quarters,
    DATEDIFF_BIG( month, @date1, @date2 ) AS Months,
    DATEDIFF_BIG( week, @date1, @date2 ) AS Weeks,
    DATEDIFF_BIG( dayofyear, @date1, @date2 ) AS DayOfYear,
    DATEDIFF_BIG( day, @date1, @date2 ) AS Days;

Резултат:

+---------+------------+----------+---------+-------------+--------+
| Years   | Quarters   | Months   | Weeks   | DayOfYear   | Days   |
|---------+------------+----------+---------+-------------+--------|
| 1000    | 4000       | 12000    | 52178   | 365243      | 365243 |
+---------+------------+----------+---------+-------------+--------+

Отново бихме могли да използваме DATEDIFF() , тъй като нито един от резултатите не е твърде голям за цяло число.

Пример 3

В този пример връщаме часовете, минутите и секундите между две дати:

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(year, 1000, @date1);
SELECT 
    DATEDIFF_BIG( hour, @date1, @date2 ) AS Hours,
    DATEDIFF_BIG( minute, @date1, @date2 ) AS Minutes,
    DATEDIFF_BIG( second, @date1, @date2 ) AS Seconds;

Резултат:

+---------+-----------+-------------+
| Hours   | Minutes   | Seconds     |
|---------+-----------+-------------|
| 8765832 | 525949920 | 31556995200 |
+---------+-----------+-------------+

Сега сме на мястото, където DATEDIFF() би върнал грешка. Броят на секундите е твърде голям за int (но не за по-голямо) ).

Пример 4

И накрая, ето пример с милисекунди, микросекунди и наносекунди:

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(year, 100, @date1);
SELECT    
    DATEDIFF_BIG( millisecond, @date1, @date2 ) AS Milliseconds,
    DATEDIFF_BIG( microsecond, @date1, @date2 ) AS Microseconds,
    DATEDIFF_BIG( nanosecond, @date1, @date2 ) AS Nanoseconds;

Резултат:

+----------------+------------------+---------------------+
| Milliseconds   | Microseconds     | Nanoseconds         |
|----------------+------------------+---------------------|
| 3155760000000  | 3155760000000000 | 3155760000000000000 |
+----------------+------------------+---------------------+

В този случай можем ясно да видим ползата от DATEDIFF_BIG() има над DATEDIFF() . DATEDIFF() щеше да падне и трите.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете езика, който в момента се използва в SQL Server

  2. Запазване на ORDER BY в SELECT INTO

  3. Изпробвайте тези най-добри практики за наблюдение на база данни на MySQL

  4. Конкатна стойност на полето към низ в SQL Server

  5. Текстът, ntext и графичните данни> типовете не могат да се сравняват или сортират, освен когато се използва оператор IS NULL или LIKE>