日付間の差異の計算
DATEDIFF は、startDate と endDate の間の合計日数を指定の単位で返します。例えば、以下の文は日付間の差を分数で計算します。また、日付と時刻の両方のコンポーネントが評価されます。1 日の差ごとに、1 日の分数である 1440 分が加算されます。
SELECT DATEDIFF('mi','1910-08-21 08:32:04','1910-08-28 01:45:00')
DATEDIFF では、日付間の実際の期間が考慮されません。startDate と endDate の間に存在する指定の日付部分境界の数と見なされることがあります。例えば、連続する年の間のこうした差異すべてで、その期間が 365 日を超えていても 365 日未満であっても、DATEDIFF として 1 が返されます。
SELECT DATEDIFF('yyyy','1910-08-21','1911-08-21') AS ExactYear,
DATEDIFF('yyyy','1910-06-30','1911-01-01') AS HalfYear,
DATEDIFF('yyyy','1910-01-01','1911-12-31') AS Nearly2Years,
DATEDIFF('yyyy','1910-12-31 11:59:59','1911-01-01 00:00:00') AS NewYearSecond
同様に、以下の文では、2 つの値の間で実際の期間はわずか 6 秒ですが、連続する分の差異は 1 となります。
SELECT DATEDIFF('mi','12:23:59','12:24:05') AS MinuteDiff
ここまでの文では日付部分に省略形を使用しましたが、完全名を指定することもできます。以下に例を示します。
SELECT DATEDIFF('minute','12:23:59','12:24:05') AS MinuteDiff
以下の埋め込み SQL の例では、ホスト変数を使用して、前述の文と同じ DATEDIFF 処理を実行します。
set datePart="minute"
set startDate="12:23:59"
set endDate="12:24:05"
&sql(SELECT DATEDIFF(:datePart,:startDate,:endDate) INTO :diff)
WRITE diff, !
以下の文は、WHERE 節で DATEDIFF を使用して、先週入院した患者を選択します。
SELECT Name,DateOfAdmission FROM Sample.Patients WHERE DATEDIFF(D,DateOfAdmission,$HOROLOG) <= 7
以下の文は、サブクエリを使用して、生年月日が現在の日付から 1500 日以内の人のレコードを返します。
SELECT Name,Age,DOB
FROM (SELECT Name,Age,DOB, DATEDIFF('dy',DOB,$HOROLOG) AS DaysTo FROM Sample.Person)
WHERE DaysTo <= 1500
ORDER BY Age