Search

曜日を表す

unknown

DAYOFWEEK(date)

日付形式または日付時刻形式で指定した日付date曜日インデックス(1=日、2=月、3=火、4=水、5=木、6=金、7=土)を返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。

mysql> SELECT DAYOFWEEK('2006-12-25'); Enter
+-------------------------+
| dayofweek('2006-12-25') |
+-------------------------+
|                       2 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT DAYOFWEEK('2006-12-25 23:50:00'); Enter
+----------------------------------+
| dayofweek('2006-12-25 23:50:00') |
+----------------------------------+
|                                2 |
+----------------------------------+
1 row in set (0.00 sec)

曜日を表す数値

unknown

WEEKDAY(date)

日付形式または日付時刻形式で指定された日付date曜日インデックス(0=月、1=火、2=水、3=木、4=金、5=土、6=日)を返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。

mysql> SELECT WEEKDAY('2006-12-24'); Enter
+-----------------------+
| WEEKDAY('2006-12-24') |
+-----------------------+
|                     6 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT WEEKDAY('2006-12-24 23:50:00'); Enter
+--------------------------------+
| WEEKDAY('2006-12-24 23:50:00') |
+--------------------------------+
|                              6 |
+--------------------------------+
1 row in set (0.00 sec)

月の日

unknown

DAYOFMONTH(date)

日付形式または日付時刻形式で指定した日付date日にち1~31の数値で返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。

mysql> SELECT DAYOFMONTH('2006-12-25'); Enter
+--------------------------+
| DAYOFMONTH('2006-12-25') |
+--------------------------+
|                       25 |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT DAYOFMONTH('2006-12-25 23:50:00'); Enter
+-----------------------------------+
| DAYOFMONTH('2006-12-25 23:50:00') |
+-----------------------------------+
|                                25 |
+-----------------------------------+
1 row in set (0.00 sec)

年の日

unknown

DAYOFYEAR(date)

日付形式または日付時刻形式で指定されたdate年間を通した日にちを、1~366の数値で返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。

mysql> SELECT DAYOFYEAR('2006-12-25'); Enter
+-------------------------+
| DAYOFYEAR('2006-12-25') |
+-------------------------+
|                     359 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT DAYOFYEAR('2006-12-25 23:50:00'); Enter
+----------------------------------+
| DAYOFYEAR('2006-12-25 23:50:00') |
+----------------------------------+
|                              359 |
+----------------------------------+
1 row in set (0.00 sec)

「年」部分を取り出す

unknown

YEAR(date)

日付形式または日付時刻式で指定した日付dateを、1000~9999の数値として返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。

mysql> SELECT YEAR('2006-12-25'); Enter
+--------------------+
| YEAR('2006-12-25') |
+--------------------+
|               2006 |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT YEAR('2006-12-25 23:50:00'); Enter
+-----------------------------+
| YEAR('2006-12-25 23:50:00') |
+-----------------------------+
|                        2006 |
+-----------------------------+
1 row in set (0.01 sec)

## 以下のように西暦部分が2桁の場合でも、4桁の西暦が返ります
mysql> SELECT YEAR('06-12-25 23:50:00'); Enter
+---------------------------+
| YEAR('06-12-25 23:50:00') |
+---------------------------+
|                      2006 |
+---------------------------+
1 row in set (0.00 sec)

「月」部分を取り出す

unknown

MONTH(date)

日付形式または日付時刻式で指定された日付dateを、1~12の数値として返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。

mysql> SELECT MONTH('2006-12-31 23:50:59'); Enter
+------------------------------+
| MONTH('2006-12-31 23:50:59') |
+------------------------------+
|                           12 |
+------------------------------+
1 row in set (0.00 sec)

「日」部分を取り出す
※MySQL 4.1.1~

unknown

DATE(date)

日付形式または日付時刻形式で指定した日付date日にちを、1~31の数値で返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。

曜日の名前

unknown

DAYNAME(date)

日付形式または日付時刻形式で指定した日付date曜日名を返します。

mysql> #SELECT DAYNAME('2006-12-25'); Enter
+-----------------------+
| DAYNAME('2006-12-25') |
+-----------------------+
| Monday                |
+-----------------------+
1 row in set (0.06 sec)

mysql> #SELECT DAYNAME('2006-12-25 23:59:00'); Enter
+--------------------------------+
| DAYNAME('2006-12-25 23:59:00') |
+--------------------------------+
| Monday                         |
+--------------------------------+
1 row in set (0.00 sec)

月の名前

unknown

MONTHNAME(date)

日付形式または日付時刻形式で指定した日付date月の名前を返します。

mysql> SELECT MONTHNAME('2006-12-25'); Enter
+-------------------------+
| MONTHNAME('2006-12-25') |
+-------------------------+
| December                |
+-------------------------+
1 row in set (0.06 sec)

mysql> SELECT MONTHNAME('2006-12-25 23:59:00'); Enter
+----------------------------------+
| MONTHNAME('2006-12-25 23:59:00') |
+----------------------------------+
| December                         |
+----------------------------------+
1 row in set (0.00 sec)

四半期

unknown

QUARTER(date)

日付形式または日付時刻形式で指定した日付dateに対応する四半期を、1~4の数値で返します。

mysql> SELECT QUARTER('2006-12-25'); Enter
+-----------------------+
| QUARTER('2006-12-25') |
+-----------------------+
|                     4 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT QUARTER('2006-12-25 23:59:00'); Enter
+--------------------------------+
| QUARTER('2006-12-25 23:59:00') |
+--------------------------------+
|                              4 |
+--------------------------------+
1 row in set (0.00 sec)

年の週

unknown

WEEK(date[, mode])

日付形式または日付時刻形式で指定された指定された日付date週数を返します。 この関数では、指定した年のコンテキストで週数が返されます。 第1引数dateには、0または1を指定します。

オプションの第2引数modeを 2つ取る場合は、週を日曜と月曜のどちらから開始するかと、返り値の範囲を0~531~52のどちらにするかを指定できます。 省略した場合は、default_week_formatサーバ変数の値(MySQL 4.0 以前は0)が適用されます。

引数 mode の動作
意味
0 日曜から週を開始。戻り値の範囲は 0 ~ 53。週 1 はその年に開始される最初の週。
1 月曜から週を開始。戻り値の範囲は 0 ~ 53。週 1 は 4 日以上の日を持つその年の最初の週。
2 日曜から週を開始。戻り値の範囲は 1 ~ 53。週 1 はその年に開始される最初の週。
3 月曜から週を開始。戻り値の範囲は 1 ~ 53。週 1 は 4 日以上の日を持つその年の最初の週。
4 日曜から週を開始。戻り値の範囲は 0 ~ 53。週 1 は 4 日以上の日を持つその年の最初の週。
5 月曜から週を開始。戻り値の範囲は 0 ~ 53。週 1 はその年に開始される最初の週。
6 日曜から週を開始。戻り値の範囲は 1 ~ 53。週 1 は 4 日以上の日を持つその年の最初の週。
7 月曜から週を開始。戻り値の範囲は 1 ~ 53。週 1 はその年に開始される最初の週。

値「3」は MySQL 4.0.5 ~ サポートされています。
値「4」以上は MySQL 4.0.17 ~ サポートされています。

mysql> SELECT WEEK('2006-2-19');
+-------------------+
| WEEK('2006-2-19') |
+-------------------+
|                 8 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT WEEK('2006-2-19',0);
+---------------------+
| WEEK('2006-2-19',0) |
+---------------------+
|                   8 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT WEEK('2006-2-19',1);
+---------------------+
| WEEK('2006-2-19',1) |
+---------------------+
|                   7 |
+---------------------+
1 row in set (0.00 sec)

# 年末年始の例(第2引数 start に 0 を指定)
mysql> SELECT WEEK('2007-1-1',0); Enter
+--------------------+
| WEEK('2007-1-1',0) |
+--------------------+
|                  0 |
+--------------------+
1 row in set (0.05 sec)

mysql> SELECT WEEK('2007-12-31',0); Enter
+----------------------+
| WEEK('2007-12-31',0) |
+----------------------+
|                   52 |
+----------------------+
1 row in set (0.00 sec)

# 年末年始の例(第2引数 start に 1 を指定)
mysql> SELECT WEEK('2007-12-31',1); Enter
+----------------------+
| WEEK('2007-12-31',1) |
+----------------------+
|                   53 |
+----------------------+
1 row in set (0.00 sec)

mysql> SELECT WEEK('2007-1-1',1); Enter
+--------------------+
| WEEK('2007-1-1',1) |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

年と年の週

unknown

YEARWEED(date[, start])

日付形式または日付時刻形式で指定された日付date年と週を返します。

オプションの引数2引数startには、0または1を指定します。 WEEK()関数のオプション引数と同じ動作をしますが、オプション引数0または1を指定した WEEK()関数の結果の週の数とは異なります。

引数dateに指定された日付の週が、その年の最初の週である場合と最後の週(年末年始)である場合、結果の年が引数dateの年と異なることがあります。

mysql> SELECT YEARWEEK('2006-2-4'); Enter
+----------------------+
| YEARWEEK('2006-2-4') |
+----------------------+
|               200605 |
+----------------------+
1 row in set (0.00 sec)

# 年末年始の例(第2引数 start なし)
mysql> SELECT YEARWEEK('2006-12-31'); Enter
+------------------------+
| YEARWEEK('2006-12-31') |
+------------------------+
|                 200653 |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2007-1-1'); Enter
+----------------------+
| YEARWEEK('2007-1-1') |
+----------------------+
|               200653 |
+----------------------+
1 row in set (0.00 sec)

# 年末年始の例(第2引数 start に 0 を指定)
mysql> SELECT YEARWEEK('2007-12-30',0); Enter
+--------------------------+
| YEARWEEK('2007-12-30',0) |
+--------------------------+
|                   200752 |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT YEARWEEK('2007-1-1',0); Enter
+------------------------+
| YEARWEEK('2007-1-1',0) |
+------------------------+
|                 200653 |
+------------------------+
1 row in set (0.00 sec)

# 年末年始の例(第2引数 start に 1 を指定)
mysql> SELECT YEARWEEK('2007-12-30',1); Enter
+--------------------------+
| YEARWEEK('2007-12-30',1) |
+--------------------------+
|                   200752 |
+--------------------------+
1 row in set (0.12 sec)

mysql> SELECT YEARWEEK('2007-1-1',1); Enter
+------------------------+
| YEARWEEK('2007-1-1',1) |
+------------------------+
|                 200701 |
+------------------------+
1 row in set (0.00 sec)

カンンダー上の週
※MySQL 4.1.1~

unknown

WEEKOFYEAR(date)

指定された日付のカレンダー上の週を、1~53の数値として返します。

mysql> SELECT WEEKOFYEAR('1998-02-20'); Enter
        -> 8

「時刻」部分を取り出す
※MySQL 4.1.1~

unknown

TIME(expr)

時刻形式または日付時刻形式で指定した日付expr時刻部分を取り出します。

mysql> SELECT TIME('2003-12-31 01:02:03'); Enter
        -> '01:02:03'
mysql> SELECT TIME('2003-12-31 01:02:03.000123'); Enter
        -> '01:02:03.000123'

「時」部分を取り出す

unknown

HOUR(time)

指定された時刻time時間部分の値を返します。
1日の時間を示す値の場合は、0~23の数値が返ります。

mysql> SELECT HOUR('23:59:00'); Enter
+------------------+
| HOUR('23:59:00') |
+------------------+
|               23 |
+------------------+
1 row in set (0.00 sec)

「分」部分を取り出す

unknown

MINUTE(time)

指定された時刻time時刻部分を、0~59の数値として返します。

mysql> SELECT MINUTE('23:59:00'); Enter
+--------------------+
| MINUTE('23:59:00') |
+--------------------+
|                 59 |
+--------------------+
1 row in set (0.00 sec)

「秒」部分を取り出す

unknown

SECOND(time)

指定された時刻time秒部分を、0~59の数値として返します。

mysql> SELECT SECOND('23:59:02'); Enter
+--------------------+
| SECOND('23:59:02') |
+--------------------+
|                  2 |
+--------------------+
1 row in set (0.00 sec)

開始日exprと終了日expr2の間の日数 [MySQL 4.1.1~]

unknown

DATEDIFF(expr, expr2)

開始日exprと終了日expr2との間の日数を返します。
exprexpr2には、日付形式または日付時刻形式を指定します。
計算は、値の日付部分のみに基づいて行われます(時刻は無視)。

期間PにN月を追加

unknown

PERIOD_ADD(P, N)

月数Nを期間PYYMM形式またはYYYYMM形式)に加えます。
結果は、YYYYMM形式で返ります。

期間Pに、日付を指定してはいけません。

mysql> SELECT PERIOD_ADD(200611,1); Enter
+----------------------+
| PERIOD_ADD(200611,1) |
+----------------------+
|               200612 |
+----------------------+
1 row in set (0.00 sec)

mysql> SELECT PERIOD_ADD(0611,1); Enter
+--------------------+
| PERIOD_ADD(0611,1) |
+--------------------+
|             200612 |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT PERIOD_ADD(9801,2); Enter
+--------------------+
| PERIOD_ADD(9801,2) |
+--------------------+
|             199803 |
+--------------------+
1 row in set (0.00 sec)

期間p1と期間p2の差分の月

unknown

PERIOD_DIFF(P1, P2)

期間P1P2の間の月数を返します。
P1P2は、YYMM形式またはYYYYMM形式で指定します。
P1P2より過去の値を指定した場合は、負の値が返ります。

期間P1P2に、日付を指定してはいけません。

mysql> SELECT PERIOD_DIFF(200611, 0711); Enter
+---------------------------+
| PERIOD_DIFF(200611, 0711) |
+---------------------------+
|                       -12 |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT PERIOD_DIFF(200711, 0611); Enter
+---------------------------+
| PERIOD_DIFF(200711, 0611) |
+---------------------------+
|                        12 |
+---------------------------+
1 row in set (0.00 sec)

0年からの日数

unknown

TO_DAYS(date)

日付date日数(年0からの通し日数)に変換して返します。

mysql> SELECT TO_DAYS(20061225); Enter
+-------------------+
| TO_DAYS(20061225) |
+-------------------+
|            733035 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT TO_DAYS('2006-12-25'); Enter
+-----------------------+
| TO_DAYS('2006-12-25') |
+-----------------------+
|                733035 |
+-----------------------+
1 row in set (0.00 sec)

Nを0年からの日数とした日付

unknown

FROM_DAYS(N)

日数NDATE型の値に変換して返します。

mysql> SELECT FROM_DAYS(733035); Enter
+-------------------+
| FROM_DAYS(733035) |
+-------------------+
| 2006-12-25        |
+-------------------+
1 row in set (0.10 sec)

日付の加算・減算

unknown

DATE_ADD(date, INTERVAL expr type)
DATE_SUB(date, INTERVAL expr type)

DATE_ADD()関数は日付の加算、DATE_SUB()関数は日付の減算をします。

MySQL v3.23からは、「+演算子」のどちらか一方の側にINTERVAL expr typeを使用できます。 この場合、もう一方の側の式には日付形式または日付時刻形式の値を指定する必要があります。

「-演算子」を使用する場合は、演算子の右側にのみINTERVAL expr typeを使用できます。 これは、日付形式または日付時刻形式の値を間隔から差し引いても意味がないためです。

dateには、開始日とするDATETIME型またはDATE型の値を指定します

exprには、開始日に加算または減算する間隔値を表す式を文字列として指定します。 先頭にマイナスを付けて負の間隔を表すこともできます。

typeには、式の解釈方法を示すキーワードを指定します。

type の値と前提となる expr の形式
type の値expr の形式
SECONDSECONDS
MINUTEMINUTES
HOURHOURS
DAYDAYS
MONTHMONTHS
YEARYEARS
MINUTE_SECOND'MINUTES:SECONDS'
HOUR_MINUTE'HOURS:MINUTES'
DAY_HOUR'DAYS HOURS'
YEAR_MONTH'YEARS-MONTHS'
HOUR_SECOND'HOURS:MINUTES:SECONDS'
DAY_MINUTE'DAYS HOURS:MINUTES'
DAY_SECOND'DAYS HOURS:MINUTES:SECONDS'
DAY_MICROSECOND'DAYS.MICROSECONDS' ※MySQL 4.1.1~
HOUR_MICROSECOND'HOURS.MICROSECONDS' ※MySQL 4.1.1~
MINUTE_MICROSECOND'MINUTES.MICROSECONDS' ※MySQL 4.1.1~
SECOND_MICROSECOND'SECONDS.MICROSECONDS' ※MySQL 4.1.1~
MICROSECOND'MICROSECONDS' ※MySQL 4.1.1~
+、-演算子による日付の演算
mysql> SELECT '2006-12-31 23:59:59' + INTERVAL 1 SECOND; Enter
+-------------------------------------------+
| '2006-12-31 23:59:59' + INTERVAL 1 SECOND |
+-------------------------------------------+
| 2007-01-01 00:00:00                       |
+-------------------------------------------+
1 row in set (0.64 sec)

mysql> SELECT INTERVAL 1 DAY + '2006-12-31'; Enter
+-------------------------------+
| INTERVAL 1 DAY + '2006-12-31' |
+-------------------------------+
| 2007-01-01                    |
+-------------------------------+
1 row in set (0.00 sec)

mysql> SELECT '2007-01-01' - INTERVAL 1 SECOND; Enter
+----------------------------------+
| '2007-01-01' - INTERVAL 1 SECOND |
+----------------------------------+
| 2006-12-31 23:59:59              |
+----------------------------------+
1 row in set (0.00 sec)
DATE_ADD()関数を使用した日付の加算
mysql> SELECT DATE_ADD('2006-12-31 23:59:59', INTERVAL 1 SECOND); Enter
+----------------------------------------------------+
| DATE_ADD('2006-12-31 23:59:59', INTERVAL 1 SECOND) |
+----------------------------------------------------+
| 2007-01-01 00:00:00                                |
+----------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD('2006-12-31 23:59:59', INTERVAL 1 DAY); Enter
+-------------------------------------------------+
| DATE_ADD('2006-12-31 23:59:59', INTERVAL 1 DAY) |
+-------------------------------------------------+
| 2007-01-01 23:59:59                             |
+-------------------------------------------------+
1 row in set (0.01 sec)

mysql> SELECT DATE_ADD('2006-12-31 23:59:59', Enter
    -> INTERVAL '1:1' MINUTE_SECOND);
+---------------------------------------------------------------+
| DATE_ADD('2006-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) |
+---------------------------------------------------------------+
| 2007-01-01 00:01:00                                           |
+---------------------------------------------------------------+
1 row in set (0.00 sec)
ADD_SUB()関数を使用した日付の減算
mysql> SELECT DATE_SUB('2007-01-01 00:00:00', Enter
    -> INTERVAL '1 1:1:1' DAY_SECOND); Enter
+----------------------------------------------------------------+
| DATE_SUB('2007-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND) |
+----------------------------------------------------------------+
| 2006-12-30 22:58:59                                            |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_SUB('2007-01-01 00:00:00', Enter
    -> INTERVAL '-1 10' DAY_HOUR); Enter
+------------------------------------------------------------+
| DATE_SUB('2007-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR) |
+------------------------------------------------------------+
| 2007-01-02 10:00:00                                        |
+------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_SUB('2007-01-01', INTERVAL 31 DAY); Enter
+-----------------------------------------+
| DATE_SUB('2007-01-01', INTERVAL 31 DAY) |
+-----------------------------------------+
| 2006-12-01                              |
+-----------------------------------------+
1 row in set (0.00 sec)

MONTH、YEAR_OF_MONTH、YEARのいずれかを加算した結果の日付が、新しい月の最大日数より大きい場合は、新しい月の最大日数に調整されます。

# 例: 2006-01-30 の1ヵ月後の日付を計算
# 2月に30日という日付は存在しないため、自動的に2月の最大日数28日に調整されます
mysql> SELECT DATE_ADD('2006-01-30', INTERVAL 1 MONTH); Enter
+------------------------------------------+
| DATE_ADD('2006-01-30', INTERVAL 1 MONTH) |
+------------------------------------------+
| 2006-02-28                               |
+------------------------------------------+
1 row in set (0.00 sec)

日付時刻形式の値を日付形式の値に加算または減算すると、結果は日付時刻形式の値に変換されます。

mysql> SELECT DATE_ADD('2007-01-01', INTERVAL 1 DAY); Enter
+----------------------------------------+
| DATE_ADD('2007-01-01', INTERVAL 1 DAY) |
+----------------------------------------+
| 2007-01-02                             |
+----------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD('2007-01-01', INTERVAL 1 HOUR); Enter
+-----------------------------------------+
| DATE_ADD('2007-01-01', INTERVAL 1 HOUR) |
+-----------------------------------------+
| 2007-01-01 01:00:00                     |
+-----------------------------------------+
1 row in set (0.00 sec)

現在日付

unknown

CURDATE()
CURRENT_DATE()

文字列のコンテキストが使用されている場合は'YYYY-MM-DD'形式、数値のコンテキストが使用されている場合はYYYYMMDD形式の値として、現在日付を返します。

CURRENT_DATE()関数は、CURDATE()関数のシノニムです。

# 値 d が文字列の場合は、'YYYY-MM-DD'形式で現在日付を返します
mysql> SELECT CURDATE(); Enter
+------------+
| CURDATE()  |
+------------+
| 2006-11-23 |
+------------+
1 row in set (0.04 sec)

# 値 d が数値の場合は、YYYYMMDD形式で現在日付を返します
mysql> SELECT CURDATE() + 0; Enter
+---------------+
| CURDATE() + 0 |
+---------------+
|    20061123   |
+---------------+
1 row in set (0.00 sec)

現在時刻

unknown

CUTIME()
CURRENT_TIME()

文字列のコンテキストが使用されている場合は'HH:MM:SS'形式、数値のコンテキストが使用されている場合はHHMMSS形式の値として、現在時刻を返します。

CURRENT_TIME()関数とCURRENT_TIME()関数は、CURTIME()関数のシノムニです。

# 値 d が文字列の場合は、'HH:MM:SS'形式で現在時刻を返します
mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 05:32:17  |
+-----------+
1 row in set (0.06 sec)

# 値 d が数値の場合は、HHMMSS形式で現在時刻を返します
mysql> SELECT CURTIME() + 0;
+---------------+
| CURTIME() + 0 |
+---------------+
|         53217 |
+---------------+
1 row in set (0.00 sec)

現在日時

unknown

NOW()
SYSDATE()
CURRENT_TIMESTAMP()

文字列のコンテキストが使用されている場合は'YYYY-MM-DD HH:MM:SS'形式、数値のコンテキストが使用されている場合はYYYYMMDDHHMMSS形式の値として、現在の日付と時刻を返します。

SYSDATE()関数と CURRENT_TIMESTAMP()関数は、 NOW()関数ののシノニムです。

mysql> SELECT NOW(); Enter
+---------------------+
| NOW()               |
+---------------------+
| 2006-11-22 02:29:51 |
+---------------------+
1 row in set (0.00 sec)

UNIXタイムスタンプ

unknown

UNIX_TIMESTAMP() または UNIX_TIMESTAMP(date)

'1970-01-01 00:00:00' GMT からの秒数を返します。

引数を指定しない場合は、UNIXタイムスタンプ('1970-01-01 00:00:00' GMTからの秒数)を符号なしの整数として返します。

引数を指定した場合は、引数として指定された日付date'1970-01-01 00:00:00' GMTからの秒数として返します。

引数dateには、DATE型文字列、DATETIME型文字列、TIMESTAMP型の値、YYMMDD形式またはYYYYMMDD形式の現地時間のいずれかを指定することができます。

# 現在時刻のUNIXタイムスタンプを表示
mysql> SELECT UNIX_TIMESTAMP(); Enter
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1164130242 |
+------------------+
1 row in set (0.00 sec)

# 指定した日時のUNIXタイムスタンプを表示
mysql> SELECT UNIX_TIMESTAMP('2007-1-1 00:00:00'); Enter
+----------------------------+
| UNIX_TIMESTAMP('2007-1-1') |
+----------------------------+
|                 1167577200 |
+----------------------------+
1 row in set (0.00 sec)

UNIXタイムスタンプをタイムスタンプ文字列に変換

unknown

FROM_UNIXTIME(unix_timestamp)

指定したUNIXタイムスタンプunix_timestampの値を、文字列のコンテキストを使用している場合は'YYYY-MM-DD HH:MM:SS'形式、数値のコンテキストを使用している場合はYYYYMMDDHHMMSS形式の値で返します。

mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('20070101235059')); Enter
+-------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP('20070101235059')) |
+-------------------------------------------------+
| 2007-01-01 23:50:59                             |
+-------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(1164256558); Enter
+---------------------------+
| FROM_UNIXTIME(1164256558) |
+---------------------------+
| 2006-11-23 13:35:58       |
+---------------------------+
1 row in set (0.00 sec)

# 0をプラスすると、結果が数値として返ります
mysql> SELECT FROM_UNIXTIME(1164256558) + 0; Enter
+-------------------------------+
| FROM_UNIXTIME(1164256558) + 0 |
+-------------------------------+
|              20061123133558   |
+-------------------------------+
1 row in set (0.39 sec)

UNIXタイムスタンプをフォーマット文字列に形式変換

unknown

FROM_UNIXTIME(unix_timestamp, format)

指定したUNIXタイムスタンプunix_timestampの値を、文字列のコンテキストを使用している場合は'YYYY-MM-DD HH:MM:SS'形式、数値のコンテキストを使用している場合は、YYYYMMDDHHMMSS形式の値で返します。

第2引数フォーマット文字列formatで指定可能な指定子は、フォーマットの指定子を参考にして下さい。

# UNIXタイムスタンプを 'YYYY-MM-DD H:i:s' 形式にフォーマット
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('20070101235059'), Enter
    -> '%Y-%m-%d %H:%i:%s');
+----------------------------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP('20070101235059'), '%Y-%m-%d %H:%i:%s') |
+----------------------------------------------------------------------+
| 2007-01-01 23:50:59                                                  |
+----------------------------------------------------------------------+
1 row in set (0.00 sec)

# UNIXタイムスタンプを YYYYMMDD 形式にフォーマット
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('20070101235059'), '%Y%m%d'); Enter
+-----------------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP('20070101235059'), '%Y%m%d') |
+-----------------------------------------------------------+
| 20070101                                                  |
+-----------------------------------------------------------+
1 row in set (0.05 sec)

フォーマットの指定子

unknown

フォーマット
指定子説明
%M月の名前(January..December)
%W曜日名(Sunday..Saturday)
%D英語のサフィックス付きの日付(0th、1st、2nd、3rd など)
%Y4 桁の数値で表した年
%y2 桁の数値で表した年
%X日曜日を週の最初の日とした場合の週に使用する4 桁の数値で表した年
%V と組合せて使用する
%x月曜日を週の最初の日とした場合の週に使用する4 桁の数値で表した年
%v と組合せて使用する
%a略式の曜日名(Sun..Sat)
%d数値で表した日付(00..31)
%e数値で表した日付(0..31)
%m数値で表した月(00..12)
%c数値で表した月(0..12)
%b略式の月名(Jan..Dec)
%j年間を通した日にち(001..366)
%H時(00..23)
%k時(0..23)
%h時(01..12)
%I時(01..12)
%l時(1..12)
%i数値で表した分(00..59)
%r12 時間形式の時刻(hh:mm:ss に続けて AM または PM)
%T24 時間形式の時刻(hh:mm:ss)
%S秒(00..59)
%s秒(00..59)
%fマイクロ秒(000000..999999)
%pAM または PM
%w曜日(0=Sunday..6=Saturday)
%U日曜日を週の最初の日とした場合の週(00..53)
%u月曜日を週の最初の日とした場合の週(00..53)
%V日曜日を週の最初の日とした場合の週(01..53)。%X と組合せて使用する
%v月曜日を週の最初の日とした場合の週(01..53)。%x と組合せて使用する
%%リテラルの '%'
  • その他の文字はいずれも、解釈されずにそのまま結果にコピーされます。
  • %f」形式指定子は MySQL 4.1.1 ~ サポートされています。
  • MySQL 3.23 以降は、形式指定子文字の前に '%' 文字を挿入する必要があります。それより前のバージョンでは、'%' を挿入してもしなくてもかまいません。
  • 月と日の指定子の範囲がゼロから始まっているのは、MySQL 3.23 以降、'2004-00-00' のような不完全な日付の格納が許容されているためです。

日付のフォーマット

unknown

DATE_FORMAT(date, format)

フォーマット文字列formatに基づいて、日付date形式変換します。

第2引数フォーマット文字列formatで指定可能な指定子は、フォーマットの指定子を参考にして下さい。

mysql> SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); Enter
+--------------------------------+
| DATE_FORMAT(NOW(), '%Y-%m-%d') |
+--------------------------------+
| 2006-11-22                     |
+--------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('2006-12-31 23:59:00', '%W %M %Y'); Enter
+------------------------------------------------+
| DATE_FORMAT('2006-12-31 23:59:00', '%W %M %Y') |
+------------------------------------------------+
| Sunday December 2006                           |
+------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('2006-12-31 23:59:00', '%H:%i:%s'); Enter
+------------------------------------------------+
| DATE_FORMAT('2006-12-31 23:59:00', '%H:%i:%s') |
+------------------------------------------------+
| 23:59:00                                       |
+------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('2006-12-31 23:59:00', '%D %y %a %d %m %b %j'); Enter
+------------------------------------------------------------+
| DATE_FORMAT('2006-12-31 23:59:00', '%D %y %a %d %m %b %j') |
+------------------------------------------------------------+
| 31st 06 Sun 31 12 Dec 365                                  |
+------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('2006-12-31 23:59:00', '%H %k %I %r %T %S %w'); Enter
+------------------------------------------------------------+
| DATE_FORMAT('2006-12-31 23:59:00', '%H %k %I %r %T %S %w') |
+------------------------------------------------------------+
| 23 23 11 11:59:00 PM 23:59:00 00 0                         |
+------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('2006-12-31 23:59:00', '%X %V'); Enter
+---------------------------------------------+
| DATE_FORMAT('2006-12-31 23:59:00', '%X %V') |
+---------------------------------------------+
| 2006 53                                     |
+---------------------------------------------+
1 row in set (0.00 sec)

時分秒のみのフォーマット

unknown

TIME_FORMAT(time, format)

DATE_FORMAT()関数と同じ動作をしますが、この関数は、フォーマット文字列format時、分、秒を処理する形式指定子しか指定できません。 それ以外の指定子を指定した場合は、NULLまたは0が返されます。

時刻timeの時間部分が23より大きい場合、時間形式指定子「%H」と「%k」では、通常の範囲0~23より大きい値が生成されます。

第2引数フォーマット文字列formatで指定可能な指定子は、フォーマットの指定子を参考にして下さい。

mysql> SELECT TIME_FORMAT(NOW(), '%H:%i:%s'); Enter
+--------------------------------+
| TIME_FORMAT(NOW(), '%H:%i:%s') |
+--------------------------------+
| 02:48:14                       |
+--------------------------------+
1 row in set (0.00 sec)

秒→時刻に変換

unknown

SEC_TO_TIME(seconds)

秒数secondsを時、分、秒の値に変換し、文字列のコンテキストが使用されている場合は'HH:MM:SS'形式、数値のコンテキストが使用されている場合はHHMMSS形式の値として返します。

# 'HH:MM:SS' 形式で取得
mysql> SELECT SEC_TO_TIME(37838); Enter
+--------------------+
| SEC_TO_TIME(37838) |
+--------------------+
| 10:30:38           |
+--------------------+
1 row in set (0.00 sec)

# HHMMSS 形式で取得
# 0をプラスすると、結果が数値として返ります
mysql> SELECT SEC_TO_TIME(37838) + 0; Enter
+------------------------+
| SEC_TO_TIME(37838) + 0 |
+------------------------+
|               103038   |
+------------------------+
1 row in set (0.00 sec)

時刻→秒に変換

unknown

TIME_TO_SEC(time)

時刻time秒数に変換して返します。

mysql> SELECT TIME_TO_SEC('23:50:00'); Enter
+-------------------------+
| TIME_TO_SEC('23:50:00') |
+-------------------------+
|                   85800 |
+-------------------------+
1 row in set (0.00 sec)

日付exprに時刻expr2を加えた結果を返す
※MySQL 4.1.1~

unknown

ADDTIME(expr, expr2)

exprexpr2を加えた結果を返します。
exprには日付形式または日付時刻形式を指定し、expr2には時刻形式を指定します。

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', '1 1:1:1.000002'); Enter
        -> '1998-01-02 01:01:01.000001'
mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998'); Enter
        -> '03:00:01.999997'

タイムスタンプ 
※MySQL 4.1.1~

unknown

TIMESTAMP(expr) または TIMESTAMP(expr, expr2)

引数が1つの場合は、日付形式または日付時刻形式の日付expr日付時刻値として返します。

引数が2つの場合は、日付形式または日付時刻形式の日付exprに時刻形式expr2を加えた結果を日付時刻値として返します。

MySQL 4.1.1 ~

mysql> SELECT TIMESTAMP('2003-12-31'); Enter
        -> '2003-12-31 00:00:00'
mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00'); Enter
        -> '2004-01-01 00:00:00'

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop