MySQL内部関数日付・時刻関数
- 曜日を表す
- 曜日を表す数値
- 月の日
- 年の日
- 「年」部分を取り出す
- 「月」部分を取り出す
- 「日」部分を取り出す〔※MySQL 4.1.1~〕
- 曜日の名前
- 月の名前
- 四半期
- 年の週
- 年と年の週
- カンンダー上の週〔※MySQL 4.1.1~〕
- 「時刻」部分を取り出す〔※MySQL 4.1.1~〕
- 「時」部分を取り出す
- 「分」部分を取り出す
- 「秒」部分を取り出す
- 開始日exprと終了日expr2の間の日数 [MySQL 4.1.1~]
- 期間PにN月を追加
- 期間p1と期間p2の差分の月
- 0年からの日数
- Nを0年からの日数とした日付
- 日付の加算・減算
- 現在日付
- 現在時刻
- 現在日時
- UNIXタイムスタンプ
- UNIXタイムスタンプをタイムスタンプ文字列に変換
- UNIXタイムスタンプをフォーマット文字列に形式変換
- フォーマットの指定子
- 日付のフォーマット
- 時分秒のみのフォーマット
- 秒→時刻に変換
- 時刻→秒に変換
- 日付exprに時刻expr2を加えた結果を返す〔※MySQL 4.1.1~〕
- タイムスタンプ 〔※MySQL 4.1.1~〕
曜日を表す
unknown
日付形式または日付時刻形式で指定した日付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
日付形式または日付時刻形式で指定された日付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
日付形式または日付時刻形式で指定した日付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
日付形式または日付時刻形式で指定された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
日付形式または日付時刻式で指定した日付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
日付形式または日付時刻式で指定された日付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の日にちを、1~31の数値で返します。 存在しない日付や日付時刻を指定した場合は、NULLが返ります。
曜日の名前
unknown
日付形式または日付時刻形式で指定した日付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
日付形式または日付時刻形式で指定した日付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
日付形式または日付時刻形式で指定した日付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
日付形式または日付時刻形式で指定された指定された日付dateの週数を返します。 この関数では、指定した年のコンテキストで週数が返されます。 第1引数dateには、0または1を指定します。
オプションの第2引数modeを 2つ取る場合は、週を日曜と月曜のどちらから開始するかと、返り値の範囲を0~53と1~52のどちらにするかを指定できます。 省略した場合は、default_week_formatサーバ変数の値(MySQL 4.0 以前は0)が適用されます。
値 | 意味 |
---|---|
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
日付形式または日付時刻形式で指定された日付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
指定された日付のカレンダー上の週を、1~53の数値として返します。
mysql> SELECT WEEKOFYEAR('1998-02-20'); Enter
-> 8
「時刻」部分を取り出す
※MySQL 4.1.1~
unknown
時刻形式または日付時刻形式で指定した日付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
指定された時刻timeの時間部分の値を返します。
1日の時間を示す値の場合は、0~23の数値が返ります。
mysql> SELECT HOUR('23:59:00'); Enter
+------------------+
| HOUR('23:59:00') |
+------------------+
| 23 |
+------------------+
1 row in set (0.00 sec)
「分」部分を取り出す
unknown
指定された時刻timeの時刻部分を、0~59の数値として返します。
mysql> SELECT MINUTE('23:59:00'); Enter
+--------------------+
| MINUTE('23:59:00') |
+--------------------+
| 59 |
+--------------------+
1 row in set (0.00 sec)
「秒」部分を取り出す
unknown
指定された時刻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
開始日exprと終了日expr2との間の日数を返します。
exprとexpr2には、日付形式または日付時刻形式を指定します。
計算は、値の日付部分のみに基づいて行われます(時刻は無視)。
期間PにN月を追加
unknown
月数Nを期間P(YYMM形式または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
期間P1とP2の間の月数を返します。
P1とP2は、YYMM形式またはYYYYMM形式で指定します。
P1にP2より過去の値を指定した場合は、負の値が返ります。
期間P1とP2に、日付を指定してはいけません。
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
日付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
日数NをDATE型の値に変換して返します。
mysql> SELECT FROM_DAYS(733035); Enter
+-------------------+
| FROM_DAYS(733035) |
+-------------------+
| 2006-12-25 |
+-------------------+
1 row in set (0.10 sec)
日付の加算・減算
unknown
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 の形式 |
---|---|
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
MONTH | MONTHS |
YEAR | YEARS |
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)
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)
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
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
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
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タイムスタンプ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
指定した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 など) |
%Y | 4 桁の数値で表した年 |
%y | 2 桁の数値で表した年 |
%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) |
%r | 12 時間形式の時刻(hh:mm:ss に続けて AM または PM) |
%T | 24 時間形式の時刻(hh:mm:ss) |
%S | 秒(00..59) |
%s | 秒(00..59) |
%f | マイクロ秒(000000..999999) |
%p | AM または 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
フォーマット文字列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
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
秒数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を秒数に変換して返します。
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
exprにexpr2を加えた結果を返します。
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'