首頁 > 資料庫 > mysql教程 > SQL中datediff函數怎麼用? (代碼詳解)

SQL中datediff函數怎麼用? (代碼詳解)

藏色散人
發布: 2019-03-26 13:46:05
原創
34043 人瀏覽過

在SQL Server中,可以使用T-SQL DATEDIFF()函數傳回兩個日期之間的差異。它適用於任何可以解析為time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表達式。因此,你也可以得到兩次的差值。

SQL中datediff函數怎麼用? (代碼詳解)

本文提供了SQL Server中的DATEDIFF()函數的使用範例。

DATEDIFF()函數語法如下:

DATEDIFF ( datepart , startdate , enddate )
登入後複製

其中datepart是你想要比較的日期的一部分。 startdate是第一個日期,enddate是結束日期。

它的運作方式是從enddate中減去startdate。

範例1

下面是一個基本的例子,我們可以算出兩個日期之間的天數:

SELECT DATEDIFF(day, '2001-01-01', '2002-01-01') AS Result;
登入後複製

結果:

+----------+
| Result   |
|----------|
| 365      |
+----------+
登入後複製

範例2

下面是另一個例子,我聲明了兩個變數並為它們分配了兩個不同的日期(我使用DATEADD()將第一個日期加1年)。然後使用DATEDIFF()傳回該日期的各個dateparts:

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(year, 1, @date1);
SELECT 
    DATEDIFF( year, @date1, @date2 ) AS Years,
    DATEDIFF( quarter, @date1, @date2 ) AS Quarters,
    DATEDIFF( month, @date1, @date2 ) AS Months,
    DATEDIFF( week, @date1, @date2 ) AS Weeks,
    DATEDIFF( dayofyear, @date1, @date2 ) AS DayOfYear,
    DATEDIFF( day, @date1, @date2 ) AS Days;
登入後複製

結果:

+---------+------------+----------+---------+-------------+--------+
| Years   | Quarters   | Months   | Weeks   | DayOfYear   | Days   |
|---------+------------+----------+---------+-------------+--------|
| 1       | 4          | 12       | 53      | 366         | 366    |
+---------+------------+----------+---------+-------------+--------+
登入後複製

範例3

##如前所述,你還可以返回日期之間的時間部分。下面是傳回日期/時間值之間的小時、分鐘和秒數的範例:

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(hour, 1, @date1);
SELECT 
    DATEDIFF( hour, @date1, @date2 ) AS Hours,
    DATEDIFF( minute, @date1, @date2 ) AS Minutes,
    DATEDIFF( second, @date1, @date2 ) AS Seconds;
登入後複製

結果:


+---------+-----------+-----------+
| Hours   | Minutes   | Seconds   |
|---------+-----------+-----------|
| 1       | 60        | 3600      |
+---------+-----------+-----------+
登入後複製

範例4

下面是一個取得兩個日期/時間值之間的毫秒、微秒和奈秒數的範例:

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(millisecond, 1, @date1);
SELECT    
    DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds,
    DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds,
    DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
登入後複製

結果:


+----------------+----------------+---------------+
| Milliseconds   | Microseconds   | Nanoseconds   |
|----------------+----------------+---------------|
| 1              | 1000           | 1000000       |
+----------------+----------------+---------------+
登入後複製

範例5 - Error錯誤!

如果你試著做一些極端的事情,例如,回傳100年後的奈秒數,你會得到一個錯誤。這是因為DATEDIFF()傳回一個int值,100年內的奈秒數比int資料型別能夠處理的奈秒數還要多。

如果你試著這麼做會發生什麼事呢?

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

結果:


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.
登入後複製
當然如果你真的必須找出100年內有多少納秒,那麼可以使用DATEDIFF_BIG()函數。這個函數傳回一個帶符號的bigint資料類型,它允許你傳回比DATEDIFF()更大的值。

相關推薦:《

MySQL教學

以上是SQL中datediff函數怎麼用? (代碼詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板