-
每個 datepart 及其縮寫都會傳回相同的值。
如果傳回值超出 int 的範圍 (-2,147,483,648 到 +2,147,483,647),就會傳回錯誤。若為 millisecond,startdate 與 enddate 之間的最大差異是 24 天、20 小時、31 分鐘和 23.647 秒。若為 second,最大差異是 68 年。
如果 startdate 和 enddate 都只被指派時間值,而且 datepart 不是時間 datepart,就會傳回 0。
startdate 或 endate 的時區位移元件不會用於計算傳回值。
由於 smalldatetime 的精確度只有到分鐘,因此當 smalldatetime 值用於 startdate 或 enddate 時,秒鐘和毫秒就一律會在傳回值中設定為 0。
如果您只有將時間值指派給日期資料類型的變數,則遺漏日期部分的值就會設定為預設值:1900-01-01。如果您只有將日期值指派給時間或日期資料類型的變數,則遺漏時間部分的值就會設定為預設值:00:00:00。如果 startdate 或 enddate 其中之一只有時間部分,而且另一個項目只有日期部分,則遺漏的時間和日期部分都會設定為預設值。
如果 startdate 和 enddate 具有不同的日期資料類型,而且其中一個項目的時間部分或小數秒數有效位數超過另一個項目,則另一個項目的遺漏部分就會設定為 0。
datepart 界限
下列陳述式具有相同的 startdate 和相同的 endate。這些日期都很接近而且時間差距為 .0000001 秒。每個陳述式中 startdate 與 endate 之間的差異會跨越其 datepart 的日曆或時間界限。每個陳述式都會傳回 1。如果這個範例使用不同的年份,而且 startdate 和 endate 都在相同的日曆週中,則 week 的傳回值就是 0。
SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(quarter, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(month, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(dayofyear, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(hour, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(minute, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(second, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');