SQL Serverでは、現在日時の取得や加減算、差分計算などを効率的に行える日付関数が多数用意されています。
本記事では、基本となる GETDATE, DATEADD, DATEDIFF を中心に、バージョンごとに追加された便利な関数も含めて解説します。
目次
SQL Serverの日付関数の基本|日付操作を効率化する方法
GETDATE関数(現在日時を取得)
GETDATEはシステムの現在日時を返します。
SELECT GETDATE(); -- 2025-10-01 12:34:56.123
DATEADD関数(日付の加算・減算)
DATEADDは日付に年・月・日・時間などを加算または減算します。
SELECT DATEADD(DAY, 7, GETDATE()); -- 7日後
SELECT DATEADD(MONTH, -1, GETDATE()); -- 1か月前
DATEDIFF関数(日付差を取得)
DATEDIFFは2つの日付の差を返します。
SELECT DATEDIFF(DAY, '2025-01-01', '2025-10-01'); -- 273
SELECT DATEDIFF(MONTH, '2024-10-01', '2025-10-01'); -- 12
DATEPART関数(年・月・日などを抽出)
DATEPARTは日付の一部(年、月、日、時など)を数値として返します。
SELECT DATEPART(YEAR, GETDATE()); -- 2025
SELECT DATEPART(MONTH, GETDATE()); -- 10
SYSDATETIME関数(高精度な現在時刻、2008以降)
SYSDATETIMEは GETDATE よりも高精度(小数点以下7桁)で現在時刻を返します。
SELECT SYSDATETIME(); -- 2025-10-01 12:34:56.1234567
EOMONTH関数(月末日を取得、2012以降)
EOMONTHは指定した日付の月末日を返します。
SELECT EOMONTH('2025-10-01'); -- 2025-10-31
SELECT EOMONTH('2025-02-10'); -- 2025-02-28
FORMAT関数(日付フォーマット、2012以降)
FORMATは日付を指定したフォーマット文字列で返します。ただし大量データではパフォーマンスに注意。
SELECT FORMAT(GETDATE(), 'yyyy/MM/dd'); -- 2025/10/01
SELECT FORMAT(GETDATE(), 'yyyy年MM月dd日 HH:mm'); -- 2025年10月01日 12:34
その他の日付関数(ISDATE, SYSUTCDATETIMEなど)
- ISDATE():文字列が有効な日付かどうかを判定。
- SYSUTCDATETIME():UTCの現在日時(高精度)。2008以降。
- SYSDATETIMEOFFSET():タイムゾーン情報付き現在日時。2008以降。
日付関数の注意点と実務活用例
日付関数をWHERE句に直接使うとインデックスが効かなくなる場合があります。
-- 悪い例
WHERE DATEDIFF(DAY, OrderDate, GETDATE()) <= 30;
-- 良い例(計算列を左辺に置かない)
WHERE OrderDate >= DATEADD(DAY, -30, GETDATE());
他RDBとの比較(MySQL・PostgreSQL・Oracle)
- MySQL:
CURDATE(),NOW()など。月末取得はLAST_DAY()。 - PostgreSQL:
CURRENT_DATE,AGE(),DATE_TRUNC()。 - Oracle:
SYSDATE,ADD_MONTHS(),LAST_DAY()。
まとめ
SQL Serverの日付関数は GETDATE, DATEADD, DATEDIFF, DATEPART が基本です。
さらに、SYSDATETIME(2008以降)、EOMONTH・FORMAT(2012以降)を使いこなすと実務での柔軟性が向上します。
SQL Server学習シリーズ

0 件のコメント:
コメントを投稿