SQL中datediff函數(shù)怎么用?(代碼詳解)

在sql server中,可以使用t-sql datediff()函數(shù)返回兩個(gè)日期之間的差異。它適用于任何可以解析為time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表達(dá)式。因此,你也可以得到兩次的差值。

SQL中datediff函數(shù)怎么用?(代碼詳解)

本文提供了SQL Server中的datediff()函數(shù)的使用示例。

DATEDIFF()函數(shù)語(yǔ)法如下:

DATEDIFF?(?datepart?,?startdate?,?enddate?)

其中datepart是你想要比較的日期的一部分。startdate是第一個(gè)日期,enddate是結(jié)束日期。

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

示例1

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

SELECT?DATEDIFF(day,?'2001-01-01',?'2002-01-01')?AS?Result;

結(jié)果:

+----------+ |?Result???| |----------| |?365??????| +----------+

示例2

下面是另一個(gè)例子,我聲明了兩個(gè)變量并為它們分配了兩個(gè)不同的日期(我使用DATEADD()將第一個(gè)日期添加1年)。然后使用DATEDIFF()返回該日期的各個(gè)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;

結(jié)果:

+---------+------------+----------+---------+-------------+--------+ |?Years???|?Quarters???|?Months???|?Weeks???|?DayOfYear???|?Days???| |---------+------------+----------+---------+-------------+--------| |?1???????|?4??????????|?12???????|?53??????|?366?????????|?366????| +---------+------------+----------+---------+-------------+--------+

示例3

如前所述,你還可以返回日期之間的時(shí)間部分。下面是返回日期/時(shí)間值之間的小時(shí)、分鐘和秒數(shù)的例子:

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;

結(jié)果:

+---------+-----------+-----------+ |?Hours???|?Minutes???|?Seconds???| |---------+-----------+-----------| |?1???????|?60????????|?3600??????| +---------+-----------+-----------+

示例4

下面是一個(gè)獲取兩個(gè)日期/時(shí)間值之間的毫秒、微秒和納秒數(shù)的例子:

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;

結(jié)果:

+----------------+----------------+---------------+ |?Milliseconds???|?Microseconds???|?Nanoseconds???| |----------------+----------------+---------------| |?1??????????????|?1000???????????|?1000000???????| +----------------+----------------+---------------+

示例5 –?Error錯(cuò)誤!

如果你嘗試做一些極端的事情,比如,返回100年后的納秒數(shù),你會(huì)得到一個(gè)錯(cuò)誤。這是因?yàn)镈ATEDIFF()返回一個(gè)int值,100年內(nèi)的納秒數(shù)比int數(shù)據(jù)類型能夠處理的納秒數(shù)還要多。

如果你試著這么做會(huì)發(fā)生什么呢?

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;

結(jié)果:

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.

當(dāng)然如果你真的必須找出100年內(nèi)有多少納秒,那么可以使用DATEDIFF_BIG()函數(shù)。這個(gè)函數(shù)返回一個(gè)帶符號(hào)的bigint數(shù)據(jù)類型,它允許你返回比DATEDIFF()更大的值。

相關(guān)推薦:《t-sql

以上就是SQL中

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享