SQL道場 日付時刻関数 EXTRACT関数
SQLで日付値から任意の日付要素の数値を得るEXTRACT関数について記載しています。
対応データベース:MySQL Oracle PostgreSQL ANSI
目次
EXTRACT関数の文法
SELECT EXTRACT(日付要素 FROM 日付) FROM テーブル
SELECT EXTRACT (Date Element FROM Date) FROM Table| 引数 Arguments  | 日付 Date  | 文字列型 String type  | 
| 書式 Format  | 文字列型 String type  | |
| 返値 return value  | 文字型 日付要素の値が戻ります。 Returns the value of a character date element.  | 
EXTRACT関数は指定された日付から指定された日付要素だけを取り出し数値で返します。PostgeSQLではEXTRACT関数もDATE_PART関数と同じ機能を持ちます。PostgreSQLの場合、DATE_PART関数は日付要素をシングルクォート「’」で囲む必要がありますが、EXTRACT関数の場合は囲んでも囲まなくてもどちらでも大丈夫です。
MySQL
EXTRACT() 関数は、DATE_ADD() または DATE_SUB() と同じ種類の unit 指定子を使用しますが、日付演算を実行するのではなく、日付から部分を抽出します。 unit 引数の詳細は、時間間隔 を参照してください。
https://dev.mysql.com/doc/refman/8.0/ja/date-and-time-functions.html#function_extract
Oracleの日付要素
| 日付要素 Date element  | 意味 Meaning  | 
|---|---|
| YEAR | 年 | 
| NONTH | 月 | 
| DAY | 日 | 
| HOUR | 時間 | 
| MINUTE | 分 | 
| SECOND | 秒 | 
| TIMEZONE_HOUR | タイムゾーン付き時間 Time with time zone  | 
| TIMEZONE_MINUTE | タイムゾーン付き分 Minutes with Time Zone  | 
| TIMEZONE_REGION | タイムゾーン Time Zone  | 
| TIMEZONE_ABBR | タイムゾーン略称 Time Zone Abbreviation  | 
PostgreSQLの日付要素
| 日付要素 Date element  | 意味 Meaning  | 
|---|---|
| century | 世紀 | 
| day | 日付 | 
| decade | 年を10で割ったもの | 
| dow | 曜日(0-6)0が日曜日 | 
| doy | 年通算日数 | 
| epoch | 1970-01-01 00:00:00からの秒数 | 
| hour | 時(0-23) | 
| microseconds | マイクロセカンド | 
| millennium | 千年期。年を1000で割ったもの | 
| milliseconds | ミリセカンド | 
| minute | 分 | 
| month | 付き。timestamp型では月(1-12)。interval型では月の数(0-11:モジュロ12) | 
| quarter | 四半期 | 
| second | 秒 | 
| week | 週 | 
| year | 年 | 
MySQLの日付要素
| 日付要素 Date element  | 単位 Unit  | 加算値の形式 addition value format  | 
|---|---|---|
| SECOND | 秒 | 数値 | 
| MINUTE | 分 | 数値 | 
| HOUR | 時間 | 数値 | 
| DAY or DAYS  | 日 | 数値 | 
| MONTH or MONTHS  | 月 | 数値 | 
| YEAR or YEARS  | 年 | 数値 | 
| MINUTE_SECOND | 分秒 | mm:ss | 
| HOUR_MINUTE | 時分 | hh:mm | 
| DAY_HOUR | 日時 | dd hh | 
| YEAR_MONTH | 年月 | yy-mm | 
| HOUR_SECOND | 時分秒 | hh:mm:ss | 
| DAY_MINUTE | 日時分 | dd hh:mm | 
| DAY_SECOND | 日時分秒 | dd hh:mm:ss | 
MySQLの実行例
日時から年の日付要素だけを取得
/* MySQL 日時から年の日付要素だけを取得するサンプル */
SELECT '2023-01-02 12:15:30',EXTRACT(YEAR FROM '2023-01-02 12:15:30');
現在の日付より月の日付要素だけを取得
/* MySQL 現在の日付より月の日付要素だけを取得するサンプル */
SELECT CURRENT_DATE,EXTRACT(MONTH FROM CURRENT_DATE);
日時からマイクロ秒の日付要素だけを取得
/* MySQL 日時から年の日付要素だけを取得するサンプル */
SELECT '2023-01-02 12:15:30.0213',EXTRACT(MICROSECOND FROM '2023-01-02 12:15:30.0213');