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

DATEDIFF_BIG() Contoh di SQL Server

Di SQL Server, Anda dapat menggunakan DATEDIFF_BIG() fungsi alih-alih DATEDIFF() fungsi jika Anda mengharapkan nilai yang dikembalikan menjadi sangat besar. Misalnya, jika Anda mencoba mencari tahu berapa milidetik dalam 1000 tahun, Anda akan mendapatkan kesalahan.

Itu karena DATEDIFF() mengembalikan int tipe data, dan hasilnya terlalu besar untuk ditangani oleh tipe data tersebut. Sebaliknya, DATEDIFF_BIG() fungsi mengembalikan bigint . yang ditandatangani tipe data, yang berarti Anda dapat menggunakannya untuk mengembalikan nilai yang jauh lebih besar. Dengan kata lain, Anda dapat menggunakan rentang tanggal yang jauh lebih besar.

Selain itu, sebenarnya tidak ada perbedaan antara kedua fungsi tersebut.

Artikel ini memberikan contoh penggunaan DATEDIFF_BIG() fungsi di SQL Server.

Sintaks

Pertama, inilah sintaksnya:

DATEDIFF_BIG ( datepart , startdate , enddate )

Dimana datepart adalah bagian dari tanggal yang ingin Anda bandingkan. tanggal mulai adalah tanggal pertama dan tanggal akhir adalah tanggal akhir.

Fungsi mengurangkan tanggal mulai dari tanggal akhir .

Cara kerjanya adalah mengembalikan hitungan (sebagai nilai integer besar yang ditandatangani) dari datepart yang ditentukan batas dilintasi antara tanggal mulai yang ditentukan dan tanggal akhir .

Ini adalah sintaks yang sama persis yang digunakan dengan DATEDIFF() fungsi.

Contoh 1

Ini adalah contoh dasar untuk mendemonstrasikan cara kerjanya.

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

Hasil:

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

Perhatikan bahwa dalam kasus ini, kita dapat menggunakan DATEDIFF() , karena hasilnya tidak terlalu besar untuk sebuah bilangan bulat.

Contoh 2

Berikut adalah contoh di mana kami mengembalikan perbedaan berbagai tanggal dari dua tanggal. Dalam hal ini saya mendeklarasikan dua variabel dan menetapkan dua tanggal yang berbeda untuk mereka (saya menggunakan DATEADD() berfungsi untuk menambahkan 1000 tahun pada kencan pertama):

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;

Hasil:

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

Sekali lagi, kita bisa menggunakan DATEDIFF() , karena tidak ada hasil yang terlalu besar untuk bilangan bulat.

Contoh 3

Dalam contoh ini kami mengembalikan jam, menit, dan detik di antara dua tanggal:

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;

Hasil:

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

Sekarang kita berada di titik di mana DATEDIFF() akan mengembalikan kesalahan. Jumlah detik terlalu besar untuk sebuah int (tetapi tidak untuk besar ).

Contoh 4

Dan terakhir, inilah contoh dengan milidetik, mikrodetik, dan nanodetik:

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;

Hasil:

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

Dalam hal ini, kita dapat dengan jelas melihat manfaat yang DATEDIFF_BIG() memiliki lebih dari DATEDIFF() . DATEDIFF() akan jatuh pada ketiganya.


  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 BCP mengekspor file yang rusak?

  2. Tanggal / Stempel waktu untuk merekam saat catatan ditambahkan ke tabel?

  3. Fungsi SQL Server Sederhana untuk Memecahkan Masalah Dunia Nyata

  4. Memperkenalkan Fitur Baru - Replikasi Cloud Spotlight

  5. Mendapatkan nilai maksimal dari baris dan bergabung ke tabel lain