2025年10月19日日曜日

SQL Serverの日付関数まとめ|GETDATE・DATEADD・DATEDIFFの使い方

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以降)

SYSDATETIMEGETDATE よりも高精度(小数点以下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 件のコメント:

コメントを投稿