この節では、時間値の処理に使用できる関数について説明します。各日付日時型が持つ値の範囲の説明と、値が指定されている場合の有効なフォーマットの説明は 項6.3. 「日付と時刻型」 をご覧ください。
名前 | 説明 |
---|---|
ADDDATE() (v4.1.1) |
日付値に時間値 (間隔) を加算します |
ADDTIME() (v4.1.1) |
時刻を加算します |
CONVERT_TZ() (v4.1.3) |
あるタイムゾーンから別のタイムゾーンへの変換を行います |
CURDATE() |
現在の日付を返します |
CURRENT_DATE() 、CURRENT_DATE |
CURDATE() の同義語 |
CURRENT_TIME() 、CURRENT_TIME |
CURTIME() の同義語 |
CURRENT_TIMESTAMP() 、CURRENT_TIMESTAMP |
NOW() の同義語 |
CURTIME() |
現在の時刻を返します |
DATE_ADD() |
日付値に時間値 (間隔) を加算します |
DATE_FORMAT() |
日付を指定内容に基づいてフォーマットします |
DATE_SUB() |
2 つの日付の減算を行います |
DATE() (v4.1.1) |
日付式または日付時刻式の日付部分を抽出します |
DATEDIFF() (v4.1.1) |
2 つの日付の減算を行います |
DAY() (v4.1.1) |
DAYOFMONTH() の同義語 |
DAYNAME() (v4.1.21) |
曜日の名前を返します |
DAYOFMONTH() |
月の日 (0-31) を返します |
DAYOFWEEK() |
引数の曜日インデックスを返します |
DAYOFYEAR() |
通日 (1-366) を返します |
EXTRACT |
日付の部分を抽出します |
FROM_DAYS() |
日数を日付に変換します |
FROM_UNIXTIME() |
UNIX タイムスタンプを日付としてフォーマットします |
GET_FORMAT() (v4.1.1) |
日付書式文字列を返します |
HOUR() |
時を抽出します |
LAST_DAY (v4.1.1) |
引数の月の最後の日を返します |
LOCALTIME() 、LOCALTIME |
NOW() の同義語 |
LOCALTIMESTAMP 、LOCALTIMESTAMP() (v4.0.6) |
NOW() の同義語 |
MAKEDATE() (v4.1.1) |
年と通日から日付を作成します |
MAKETIME (v4.1.1) |
MAKETIME() |
MICROSECOND() (v4.1.1) |
引数のマイクロ秒を返します |
MINUTE() |
引数の分を返します |
MONTH() |
指定された日付の月を返します |
MONTHNAME() (v4.1.21) |
月の名前を返します |
NOW() |
現在の日付と時刻を返します |
PERIOD_ADD() |
年月に期間を加算します |
PERIOD_DIFF() |
2 つの期間の間の月数を返します |
QUARTER() |
日付引数の四半期を返します |
SEC_TO_TIME() |
秒数を 'HH:MM:SS' の形式に変換します |
SECOND() |
秒 (0-59) を返します |
STR_TO_DATE() (v4.1.1) |
文字列を日付に変換します |
SUBDATE() |
3 つの引数を指定して呼び出した場合は DATE_SUB() の同義語になります |
SUBTIME() (v4.1.1) |
時刻の減算を行います |
SYSDATE() |
この関数が実行された時刻を返します |
TIME_FORMAT() |
時刻としてフォーマットします |
TIME_TO_SEC() |
引数を秒数に変換したものを返します |
TIME() (v4.1.1) |
指定された式の時刻部分を抽出します |
TIMEDIFF() (v4.1.1) |
時刻の減算を行います |
TIMESTAMP() (v4.1.1) |
この関数は、引数が 1 つ指定された場合は日付式または日付時刻式を返し、引数が 2 つ指定された場合はそれらの引数の和を返します |
TIMESTAMPADD() (v5.0.0) |
日付時刻式に間隔を加算します |
TIMESTAMPDIFF() (v5.0.0) |
日付時刻式から間隔を減算します |
TO_DAYS() |
日付引数を日数に変換したものを返します |
UNIX_TIMESTAMP() |
UNIX タイムスタンプを返します |
UTC_DATE() (v4.1.1) |
現在の UTC 日付を返します |
UTC_TIME() (v4.1.1) |
現在の UTC 時刻を返します |
UTC_TIMESTAMP() (v4.1.1) |
現在の UTC 日付と UTC 時刻を返します |
WEEK() |
週数を返します |
WEEKDAY() |
曜日インデックスを返します |
WEEKOFYEAR() (v4.1.1) |
日付のカレンダ週 (0-53) を返します |
YEAR() |
年を返します |
YEARWEEK() |
年と週を返します |
日付関数の使用例です。次のクエリーはすべての行を、過去
30 日以内の date_col
で選択します :
mysql>SELECT
->something
FROMtbl_name
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <=
date_col
;
またこのクエリーは、将来の日付の行を選択します。
日付値を受け入れる関数は通常、日付時刻値を受け入れ、時刻の部分を無視します。そして時刻値を受け入れる関数は通常、日付時刻値を受け入れ、日付の部分を無視します。
現在の日付または時刻をそれぞれ戻す関数は、クエリー実行の開始時点で、各クエリーにつき一度だけ評価されます。つまり、NOW()
などの関数が単一クエリー内で複数回参照されている場合、どの参照でも常に同じ結果が生成されます。(ここで言う単一クエリーには、ストアドプログラム
(ストアドルーチン、トリガー、またはイベント)
の呼び出しやそのプログラムから呼び出されるすべてのサブプログラムも含まれる。)
またこの法則は、CURDATE()
、CURTIME()
、UTC_DATE()
、UTC_TIME()
、UTC_TIMESTAMP()
、およびそれらの同義語にも適合します。
CURRENT_TIMESTAMP()
、CURRENT_TIME()
、CURRENT_DATE()
、そして
FROM_UNIXTIME()
関数は、time_zone
接続の現行時間帯での値を返し、それらはシステム環境変数の値として利用できます。また、UNIX_TIMESTAMP()
は、その引数が現行時間帯での日付時刻値であると想定します。MySQL Server Time Zone Support
を参照してください。
日付関数のあるものは、その他とは異なり、「zero」
日付、または '2001-11-00'
のような不完全な日付とも使用できます。日付の一部を抽出する関数は通常、不完全な日付が指定されても正しく機能するため、ユーザーがゼロ以外の値を期待するような状況で
0 を返すことができます。例 :
mysql> SELECT DAYOFMONTH('2001-11-00'), MONTH('2005-00-00');
-> 0, 0
ほかの関数は完全な日付を必要とし、日付が不完全な場合は
NULL
を返します。これらには日付演算を行う関数、または日付の一部をマップし名前にする関数が含まれます。例
:
mysql>SELECT DATE_ADD('2006-05-00',INTERVAL 1 DAY);
-> NULL mysql>SELECT DAYNAME('2006-05-00');
-> NULL
ADDDATE(
、date
,INTERVAL
expr
unit
)ADDDATE(
expr
,days
)
2 番目の引数の
INTERVAL
フォームで呼び出される際、ADDDATE()
は DATE_ADD()
の同義語になります。関連する関数
SUBDATE()
は
DATE_SUB()
の同義語です。INTERVAL
unit
引数の詳細については、DATE_ADD()
のディスカッションをご覧ください。
mysql>SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);
-> '2008-02-02' mysql>SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);
-> '2008-02-02'
2 番目の引数の days
フォームで呼び出される場合、MySQL はそれを
expr
に加えるために、整数の日数として扱います。
mysql> SELECT ADDDATE('2008-01-02', 31);
-> '2008-02-02'
ADDTIME()
は
expr2
と
expr1
を加算し、その結果を返します。expr1
は時刻式、日付時刻式のいずれかであり、expr2
は時刻式です。
mysql>SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');
-> '2008-01-02 01:01:01.000001' mysql>SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
-> '03:00:01.999997'
CONVERT_TZ()
は、日付時刻値 dt
を、from_tz
が指定する時間帯から、to_tz
が指定する時間帯に変換し、結果の値を返します。時間帯は、MySQL Server Time Zone Support
で説明されているように指定されています。引数が無効な場合、この関数は
NULL
を返します。
値が、from_tz
から UTC
に変換される際に
TIMESTAMP
でサポートされている範囲から外れた場合、変換は行われません。TIMESTAMP
の範囲は 項6.1.2. 「日付と時刻型の概要」
に記載されています。
mysql>SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
-> '2004-01-01 13:00:00' mysql>SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
-> '2004-01-01 22:00:00'
'MET'
または
'Europe/Moscow'
などの、名前付きの時間帯を使用するには、時間帯テーブルが正確に設定されている必要があります。手順については
MySQL Server Time Zone Support をご覧ください。
MySQL 5.1.17
より前のバージョンでは、ほかのテーブルが
LOCK TABLES
でロックされている間に
CONVERT_TZ()
を使用したい場合は、mysql.time_zone_name
テーブルもロックする必要があります。項8.4.5. 「LOCK TABLES
と
UNLOCK
TABLES
構文」
を参照してください。
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の日付を
'YYYY-MM-DD'
または
YYYYMMDD
フォーマットの値で返します。
mysql>SELECT CURDATE();
-> '2008-06-13' mysql>SELECT CURDATE() + 0;
-> 20080613
CURRENT_DATE
および
CURRENT_DATE()
は CURDATE()
の同義語です。
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の時刻を
'HH:MM:SS'
または
HHMMSS.uuuuuu
フォーマットの値で返します。値は現在の時間帯で表現されています。
mysql>SELECT CURTIME();
-> '23:50:26' mysql>SELECT CURTIME() + 0;
-> 235026.000000
CURRENT_TIME
および
CURRENT_TIME()
は CURTIME()
の同義語です。
CURRENT_TIMESTAMP
、CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP
および
CURRENT_TIMESTAMP()
は NOW()
の同義語です。
日付、または日付時刻式
expr
の日付部分を摘出します。
mysql> SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'
DATEDIFF()
は、expr1
–
expr2
を、両日付間の日数を表す値として返します。expr1
と expr2
は日付式、日付時刻式のいずれかになります。値の日付部分のみが計算に使用されます。
mysql>SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1 mysql>SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
-> -31
DATE_ADD(
、date
,INTERVAL
expr
unit
)DATE_SUB(
date
,INTERVAL
expr
unit
)
これらの関数は日付演算を実行します。date
引数は、開始日付値または開始日付時刻値を指定します。expr
は、開始日付の加算または減算で使用する間隔値を指定する式です。expr
は文字列であり、負の間隔の場合は
「-
」
で始めることができます。unit
は、式を解釈する際の単位を示すキーワードです。
INTERVAL
キーワードおよび unit
指定子は、大文字小文字の区別をしません。
次の表は、各 unit
値に対して予想される
expr
引数のフォームを示したものです。
unit 値
|
予想される
expr
フォーマット
|
MICROSECOND |
MICROSECONDS |
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
WEEK |
WEEKS |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
YEAR |
YEARS |
SECOND_MICROSECOND |
'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND |
'MINUTES:SECONDS.MICROSECONDS' |
MINUTE_SECOND |
'MINUTES:SECONDS' |
HOUR_MICROSECOND |
'HOURS:MINUTES:SECONDS.MICROSECONDS' |
HOUR_SECOND |
'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
DAY_MICROSECOND |
'DAYS
HOURS:MINUTES:SECONDS.MICROSECONDS' |
DAY_SECOND |
'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE |
'DAYS HOURS:MINUTES' |
DAY_HOUR |
'DAYS HOURS' |
YEAR_MONTH |
'YEARS-MONTHS' |
戻り値は次のように引数に応じて異なります。
第 1 引数が
DATETIME
(または
TIMESTAMP
)
値である場合と、第 1 引数が
DATE
で、unit
値に
HOURS
、MINUTES
、または
SECONDS
が含まれている場合は、DATETIME
。
それ以外の場合は文字列。
結果が確実に
DATETIME
になるように、CAST()
を使って第 1 引数を
DATETIME
に変換してもかまいません。
MySQL は、expr
フォーマットにおいてはどのような句読区切り記号の使用も許容します。上記の表の区切り記号は提案にすぎません。date
引数が DATE
値であり、行う計算が
YEAR
、MONTH
、および
DAY
部のみ
(時刻部分はなし) を含む場合は、結果は
DATE
値になります。ほかの場合は、結果は
DATETIME
値になります。
また、日付演算は、INTERVAL
を
+
または
-
演算子と共に使用しても行うことができます :
date
+ INTERVALexpr
unit
date
- INTERVALexpr
unit
INTERVAL
は、一方の表現が日付か日付時刻値であれば、どちら側のexpr
unit
+
演算子でも使用できます。-
演算子に関しては、INTERVAL
は、インターバルから日付や日付日時値を摘出しても意味がないため、右側でのみ使用できます。
expr
unit
mysql>SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND;
-> '2009-01-01 00:00:00' mysql>SELECT INTERVAL 1 DAY + '2008-12-31';
-> '2009-01-01' mysql>SELECT '2005-01-01' - INTERVAL 1 SECOND;
-> '2004-12-31 23:59:59' mysql>SELECT DATE_ADD('2000-12-31 23:59:59',
->INTERVAL 1 SECOND);
-> '2001-01-01 00:00:00' mysql>SELECT DATE_ADD('2010-12-31 23:59:59',
->INTERVAL 1 DAY);
-> '2011-01-01 23:59:59' mysql>SELECT DATE_ADD('2100-12-31 23:59:59',
->INTERVAL '1:1' MINUTE_SECOND);
-> '2101-01-01 00:01:00' mysql>SELECT DATE_SUB('2005-01-01 00:00:00',
->INTERVAL '1 1:1:1' DAY_SECOND);
-> '2004-12-30 22:58:59' mysql>SELECT DATE_ADD('1900-01-01 00:00:00',
->INTERVAL '-1 10' DAY_HOUR);
-> '1899-12-30 14:00:00' mysql>SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02' mysql>SELECT DATE_ADD('1992-12-31 23:59:59.000002',
->INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'
短すぎる区間値を指定した場合
(unit
キーワードから予想されるすべての区間部分は含みません)
、MySQL
は区間値の一番左の部分が放置されているものと想定します。たとえば、DAY_SECOND
の unit
を指定した場合、expr
の値は日にち、時間、分、秒の部分を持つものと想定されます。'1:10'
のような値を指定すると、MySQL
は日にちと時間の部分が抜けており、値は分と秒を示しているものと想定します。つまり、'1:10'
DAY_SECOND
は、'1:10'
MINUTE_SECOND
と同等に解釈されます。これは、MySQL が
TIME
値を、時刻ではなく経過時間として解釈するやり方に相似しています。
expr
は文字列として処理されるため、INTERVAL
に文字列以外の値を指定する際には注意が必要です。たとえば、間隔指定子が
HOUR_MINUTE
の場合には、6/4
は
1.5000
と評価され、1
時間と 5000 分として処理されます。
mysql>SELECT 6/4;
-> 1.5000 mysql>SELECT DATE_ADD('2009-01-01', INTERVAL 6/4 HOUR_MINUTE);
-> '2009-01-04 12:20:00'
間隔値が予想どおりに解釈されるようにするには、CAST()
演算を使用します。6/4
を 1 時間と 5
分として処理するには、これを、小数点以下の桁数が
1 桁の
DECIMAL
値にキャストします。
mysql>SELECT CAST(6/4 AS DECIMAL(3,1));
-> 1.5 mysql>SELECT DATE_ADD('1970-01-01 12:00:00',
->INTERVAL CAST(6/4 AS DECIMAL(3,1)) HOUR_MINUTE);
-> '1970-01-01 13:05:00'
時間部分を含むなにかを日付値に追加、または日付値から摘出する場合、結果は自動的に日付時刻値に変換されます :
mysql>SELECT DATE_ADD('2013-01-01', INTERVAL 1 DAY);
-> '2013-01-02' mysql>SELECT DATE_ADD('2013-01-01', INTERVAL 1 HOUR);
-> '2013-01-01 01:00:00'
MONTH
、YEAR_MONTH
、または
YEAR
を加え、結果の日付が新しい月の最大日数より大きな日を持つ場合、その日は新しい月の最大日数に調整されます。
mysql> SELECT DATE_ADD('2009-01-30', INTERVAL 1 MONTH);
->
'2009-02-28'
日付算術演算には完全な日付が必須であり、'2006-07-00'
のような不完全な日付や、誤った形の日付では正常に作動しません
:
mysql>SELECT DATE_ADD('2006-07-00', INTERVAL 1 DAY);
-> NULL mysql>SELECT '2005-03-32' + INTERVAL 1 MONTH;
-> NULL
date
値を
format
文字列に基づいてフォーマットします。
次の指定子は format
文字列で使用されていることもあります。書式指定子キャラクタの前には
「%
」
キャラクタを付ける必要があります。
指定子 | 説明 |
%a |
簡略曜日名
(Sun ..Sat ) |
%b |
簡略月名
(Jan ..Dec ) |
%c |
月、数字
(0 ..12 ) |
%D |
英語の接尾辞を持つ日にち
(0th ,
1st ,
2nd ,
3rd , …) |
%d |
にち、数字
(00 ..31 ) |
%e |
にち、数字
(0 ..31 ) |
%f |
マイクロ秒
(000000 ..999999 ) |
%H |
時間
(00 ..23 ) |
%h |
時間
(01 ..12 ) |
%I |
時間
(01 ..12 ) |
%i |
分、数字
(00 ..59 ) |
%j |
日
(001 ..366 ) |
%k |
時間
(0 ..23 ) |
%l |
時間
(1 ..12 ) |
%M |
名
(January ..12
月 ) |
%m |
月、数字
(00 ..12 ) |
%p |
AM または
PM
|
%r |
時間、12 時間単位 (hh:mm:ss
に AM または
PM が続く) |
%S |
秒
(00 ..59 ) |
%s |
秒
(00 ..59 ) |
%T |
時間、24 時間単位 (hh:mm:ss ) |
%U |
週
(00 ..53 )、週の開始は日曜日 |
%u |
週
(00 ..53 )、週の開始は月曜日 |
%V |
週
(01 ..53 )、週の開始は日曜日で、%X
と使用 |
%v |
週
(01 ..53 )、週の開始は月曜日で、%x
と使用 |
%W |
曜日名
(Sunday ..土曜日 ) |
%w |
曜日
(0 =Sunday..6 =Saturday) |
%X |
年間の週、週の始まりは日曜日、週、数字、4 桁 ;
%V と使用 |
%x |
年間の週、週の始まりは月曜日、数字、4
桁、%v と使用 |
%Y |
年、数字、4 桁 |
%y |
年、数字 (2 桁) |
%% |
リテラル 「% 」 文字 |
% |
x 、上記にないすべての
「x 」 |
MySQL は '2014-00-00'
のような不完全な日付の格納を許可するため、月と日にちの指定子の範囲は
0 から始まります。
MySQL 5.1.12
では、日にちおよび月の名称に使用される言語と、省略後は、lc_time_names
システム環境変数 (MySQL Server Locale Support)
の値によって管理されます。
MySQL 5.1.15
では、DATE_FORMAT()
はキャラクタセットを持つ文字列と、character_set_connection
および
collation_connection
によって提示された照合を返し、非 ASCII
文字を含む月と曜日の名前を戻せるようになりました。5.1.15
の前は、戻り値はバイナリ列でした。
mysql>SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
-> 'Sunday October 2009' mysql>SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00' mysql>SELECT DATE_FORMAT('1900-10-04 22:23:00',
->'%D %y %a %d %m %b %j');
-> '4th 00 Thu 04 10 Oct 277' mysql>SELECT DATE_FORMAT('1997-10-04 22:23:00',
->'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6' mysql>SELECT DATE_FORMAT('1999-01-01', '%X %V');
-> '1998 52' mysql>SELECT DATE_FORMAT('2006-06-00', '%d');
-> '00'
DATE_SUB(
date
,INTERVAL
expr
unit
)
DATE_ADD()
の説明を参照してください。
DAY()
は
DAYOFMONTH(
の同義語です。
date
に対して曜日の名前を返します。MySQL 5.1.12
では、名前に使用される言語は、lc_time_names
システム環境変数 (MySQL Server Locale Support)
の値によって管理されます。
mysql> SELECT DAYNAME('2007-02-03');
-> 'Saturday'
date
の日を、1
から
31
の範囲で返します。ただし、'0000-00-00'
や '2008-00-00'
のように日付の日の部分がゼロになっている場合には、0
を返します。
mysql> SELECT DAYOFMONTH('2007-02-03');
-> 3
date
の曜日インデックス
(1
=
Sunday、2
=
Monday、…、7
=
Saturday)
を返します。これらのインデックス値は、ODBC
標準に対応しています。
mysql> SELECT DAYOFWEEK('2007-02-03');
-> 7
1
から
366
の範囲内の通日を、date
に対して返します。
mysql> SELECT DAYOFYEAR('2007-02-03');
-> 34
EXTRACT()
関数は、DATE_ADD()
または
DATE_SUB()
と同様の装置指定子を使用しますが、データ演算を行うのではなく、データから一部を摘出します。
mysql>SELECT EXTRACT(YEAR FROM '2009-07-02');
-> 2009 mysql>SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03');
-> 200907 mysql>SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');
-> 20102 mysql>SELECT EXTRACT(MICROSECOND
->FROM '2003-01-02 10:30:00.000123');
-> 123
日数 N
を得て、DATE
値を返します。
mysql> SELECT FROM_DAYS(730669);
-> '2007-07-03'
FROM_DAYS()
を古い日付で注意深く使用します。グレゴリオ暦
(1582)
の出現を優先する値と共に使用することが目的ではありません。項7.7. 「MySQL が使用するカレンダーは ?」
を参照してください。
FROM_UNIXTIME(
、unix_timestamp
)FROM_UNIXTIME(
unix_timestamp
,format
)
unix_timestamp
引数の表現を、関数が文字列で使用されたか、または数字のコンテキストで使用されたかによって、'YYYY-MM-DDHH:MM:SS'
または
YYYYMMDDHHMMSS.uuuuuu
のフォーマットで値として返します。値は現在の時間帯で表現されています。unix_timestamp
は、UNIX_TIMESTAMP()
関数で生成されるような内部タイムスタンプ値です。
format
が与えられていれば、DATE_FORMAT()
関数のエントリで挙げられているのと同じ方法で使用される
format
文字列に基づいて、結果はフォーマットされます。
mysql>SELECT FROM_UNIXTIME(1196440219);
-> '2007-11-30 10:30:19' mysql>SELECT FROM_UNIXTIME(1196440219) + 0;
-> 20071130103019.000000 mysql>SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
->'%Y %D %M %h:%i:%s %x');
-> '2007 30th November 10:30:59 2007'
注記
:UNIX_TIMESTAMP()
および
FROM_UNIXTIME()
を使って
TIMESTAMP
値と Unix
タイムスタンプ値間を変換する場合、マッピングは双方向に対して
1 対 1
ではないので、変換は高損失になります。詳細は
UNIX_TIMESTAMP()
関数の説明をご覧ください。
GET_FORMAT({DATE|TIME|DATETIME},
{'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
フォーマット文字列を返します。この関数は、DATE_FORMAT()
と
STR_TO_DATE()
関数の組み合わせで使用すると便利です。
1 番目と 2
番目の引数に対する有効な値は、複数の可能なフォーマット文字列で結果が生じます
(使用される指定子については、DATE_FORMAT()
関数の説明にあるテーブルをご覧ください)
。ISO フォーマットは ISO 8601 ではなく、ISO 9075
を参照しています。
関数呼び出し | 結果 |
GET_FORMAT(DATE,'USA') |
'%m.%d.%Y' |
GET_FORMAT(DATE,'JIS') |
'%Y-%m-%d' |
GET_FORMAT(DATE,'ISO') |
'%Y-%m-%d' |
GET_FORMAT(DATE,'EUR') |
'%d.%m.%Y' |
GET_FORMAT(DATE,'INTERNAL') |
'%Y%m%d' |
GET_FORMAT(DATETIME,'USA') |
'%Y-%m-%d %H.%i.%s' |
GET_FORMAT(DATETIME,'JIS') |
'%Y-%m-%d %H:%i:%s' |
GET_FORMAT(DATETIME,'ISO') |
'%Y-%m-%d %H:%i:%s' |
GET_FORMAT(DATETIME,'EUR') |
'%Y-%m-%d %H.%i.%s' |
GET_FORMAT(DATETIME,'INTERNAL') |
'%Y%m%d%H%i%s' |
GET_FORMAT(TIME,'USA') |
'%h:%i:%s %p' |
GET_FORMAT(TIME,'JIS') |
'%H:%i:%s' |
GET_FORMAT(TIME,'ISO') |
'%H:%i:%s' |
GET_FORMAT(TIME,'EUR') |
'%H.%i.%s' |
GET_FORMAT(TIME,'INTERNAL') |
'%H%i%s' |
TIMESTAMP
は、GET_FORMAT()
への最初の引数としても使用でき、その場合、関数は
DATETIME
に対してと同じ値を返します。
mysql>SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));
-> '03.10.2003' mysql>SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));
-> '2003-10-31'
time
の正時 (hour)
を返します。戻り値の範囲は、時刻値の
0
から
23
です。ただし、TIME
値の範囲は実際にはもっと大きいため、HOUR
は 23
以上の値を返すことができます。
mysql>SELECT HOUR('10:05:03');
-> 10 mysql>SELECT HOUR('272:59:59');
-> 272
日付または日付時刻を取り、月の最後の日の換算値を返します。引数が無効である場合は
NULL
を返します。
mysql>SELECT LAST_DAY('2003-02-05');
-> '2003-02-28' mysql>SELECT LAST_DAY('2004-02-05');
-> '2004-02-29' mysql>SELECT LAST_DAY('2004-01-01 01:01:01');
-> '2004-01-31' mysql>SELECT LAST_DAY('2003-03-32');
-> NULL
LOCALTIME
および
LOCALTIME()
は
NOW()
の同義語です。
LOCALTIMESTAMP
、LOCALTIMESTAMP()
LOCALTIMESTAMP
および
LOCALTIMESTAMP()
は NOW()
の同義語です。
指定された年と通日の値に基づいて日付を返します。dayofyear
は 0
より大きい必要があり、そうでない場合は結果が
NULL
になります。
mysql>SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
-> '2011-01-31', '2011-02-01' mysql>SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);
-> '2011-12-31', '2014-12-31' mysql>SELECT MAKEDATE(2011,0);
-> NULL
hour
、minute
、および
second
引数から計算された時間値を返します。
mysql> SELECT MAKETIME(12,15,30);
-> '12:15:30'
時間または日付時刻式 expr
からのマイクロ秒を、0
から 999999
までの範囲の数値として返します。
mysql>SELECT MICROSECOND('12:00:00.123456');
-> 123456 mysql>SELECT MICROSECOND('2009-12-31 23:59:59.000010');
-> 10
0
から
59
の範囲内で、time
の分数を返します。
mysql> SELECT MINUTE('2008-02-03 10:05:03');
-> 5
date
の月を、1
(1 月)
から 12
(12 月)
の範囲で返します。ただし、'0000-00-00'
や '2008-00-00'
のように日付の月の部分がゼロになっている場合には、0
を返します。
mysql> SELECT MONTH('2008-02-03');
-> 2
date
の月の完全名を返します。MySQL 5.1.12
では、名前に使用される言語は、lc_time_names
システム環境変数 (MySQL Server Locale Support)
の値によって管理されます。
mysql> SELECT MONTHNAME('2008-02-03');
-> 'February'
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の日付を
'YYYY-MM-DDHH:MM:SS'
または
YYYYMMDDHHMMSS.uuuuuu
フォーマットの値で返します。値は現在の時間帯で表現されています。
mysql>SELECT NOW();
-> '2007-12-15 23:50:26' mysql>SELECT NOW() + 0;
-> 20071215235026.000000
NOW()
は、ステートメントが実行を開始する時間を示す定数時間を返します。(ストアドファンクションまたはトリガーで、NOW()
はファンクションまたはトリガーステートメントが実行を開始する時間を返す)。これは、正確な実行時間を返す
SYSDATE()
の動作によって異なります。
mysql>SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 | +---------------------+----------+---------------------+ mysql>SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 | +---------------------+----------+---------------------+
そのほか、SET
TIMESTAMP
ステートメントは
NOW()
によって戻された値に影響を及ぼしますが、SYSDATE()
によって戻された値には影響しません。つまり、バイナリログのタイムスタンプ設定は、SYSDATE()
の呼び出しには効果をもたらさないということになります。
ふたつの関数の違いに関する詳細は、SYSDATE()
の説明をご覧ください。
N
月を、期間
P
に加えます
(フォーマットは YYMM
または YYYYMM
)
。フォーマット
YYYYMM
で値を返します。期間引数
P
は日付値ではありません
のでご注意ください。
mysql> SELECT PERIOD_ADD(200801,2);
-> 200803
期間 P1
と
P2
間の月の数を返します。P1
および P2
は、YYMM
または
YYYYMM
のフォーマットになります。期間引数
P1
および
P2
は日付値ではありませんのでご注意ください。
mysql> SELECT PERIOD_DIFF(200802,200703);
-> 11
date
の四半期を
1
から
4
の範囲内で返します。
mysql> SELECT QUARTER('2008-04-01');
-> 2
0
から
59
の範囲内で、time
の秒数を返します。
mysql> SELECT SECOND('10:05:03');
-> 3
seconds
引数を時、分、秒に変換したものを、TIME
値として返します。結果の範囲は
TIME
データ型の範囲によって制約されます。その範囲外の値に引数が対応している場合には、警告が発行されます。
mysql>SELECT SEC_TO_TIME(2378);
-> '00:39:38' mysql>SELECT SEC_TO_TIME(2378) + 0;
-> 3938
これは
DATE_FORMAT()
関数の反転です。文字列
str
とフォーマット文字列
format
を受取ります。STR_TO_DATE()
は、フォーマット文字列が日付と時間の両方の部分を含む場合は
DATETIME
値を返し、文字列が日付または時間の部分の一方のみを含む場合は
DATE
または
TIME
値を返します。str
から抽出された日付値、時刻値、または日付時刻値が不正な場合には、STR_TO_DATE()
から NULL
が返され、警告が発行されます。
サーバーは str
を走査し、それに format
をマッチさせようとします。書式文字列には、リテラルキャラクタと
%
で始まる書式指定子を含めることができます。format
内のリテラルキャラクタは、str
内のリテラルにマッチする必要があります。format
内の書式指定子は、str
内の日付部分または時刻部分にマッチする必要があります。format
で使用できる指定子については、DATE_FORMAT()
関数の説明を参照してください。
mysql>SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
-> '2013-05-01' mysql>SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
-> '2013-05-01'
str
の先頭から走査が開始され、format
にマッチングしないことが判明すると処理が失敗します。str
の末尾に存在する余分なキャラクタは、無視されます。
mysql>SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
-> '09:30:17' mysql>SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
-> NULL mysql>SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
-> '09:30:17'
指定されなかった日付部分や時刻部分の値は 0
になるため、str
に指定された値が不完全だった場合には、結果の一部または全部が
0 に設定されます。
mysql>SELECT STR_TO_DATE('abc','abc');
-> '0000-00-00' mysql>SELECT STR_TO_DATE('9','%m');
-> '0000-09-00' mysql>SELECT STR_TO_DATE('9','%s');
-> '00:00:09'
日付値の部分を確認する範囲は、項6.3.1. 「DATETIME
、DATE
、そして
TIMESTAMP
型」
で説明されている通りです。つまり、たとえば、「zero」
日付、または部分の値が 0 の日付は、SQL
モードが特にそれらを禁止する設定になっていないかぎり、使用が許可されます。
mysql>SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
-> '0000-00-00' mysql>SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
-> '2004-04-31'
年と週の組み合わせは、週が月の境界を越えた場合、年と月を一意的に識別できないため、フォーマット
"%X%V"
を使用して、年 -
週文字列を日付に変換することはできません。年
-
週を日付に変換するには、曜日も同じく指定するべきです
:
mysql> SELECT STR_TO_DATE('200442 Monday', '%X%V %W');
->
'2004-10-18'
SUBDATE(
、date
,INTERVAL
expr
unit
)SUBDATE(
expr
,days
)
2 番目の引数の
INTERVAL
フォームで呼び出される際、SUBDATE()
は DATE_SUB()
の同義語になります。INTERVAL
unit
引数の詳細については、DATE_ADD()
のディスカッションをご覧ください。
mysql>SELECT DATE_SUB('2008-01-02', INTERVAL 31 DAY);
-> '2007-12-02' mysql>SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);
-> '2007-12-02'
2 番目のフォームは、days
に整数値を使用することを許可します。そのような場合は、日付または日付時刻式
expr
から日数が減算されると解釈されます。
mysql> SELECT SUBDATE('2008-01-02 12:00:00', 31);
-> '2007-12-02
12:00:00'
SUBTIME()
は、expr1
–
expr2
を、expr1
と同じ書式の値として返します。expr1
は時刻式、日付時刻式のいずれかであり、expr2
は時刻式です。
mysql>SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');
-> '2007-12-30 22:58:58.999997' mysql>SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');
-> '-00:59:59.999999'
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の日付を
'YYYY-MM-DDHH:MM:SS'
または
YYYYMMDDHHMMSS.uuuuuu
フォーマットの値で返します。
SYSDATE()
は、それが実行された時間を返します。これは
NOW()
の動作によって異なり、ステートメントが実行を開始する時間を示す定数時間を返します。(ストアドファンクションまたはトリガーで、NOW()
はファンクションまたはトリガーステートメントが実行を開始する時間を返す)。
mysql>SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 | +---------------------+----------+---------------------+ mysql>SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 | +---------------------+----------+---------------------+
そのほか、SET
TIMESTAMP
ステートメントは
NOW()
によって戻された値に影響を及ぼしますが、SYSDATE()
によって戻された値には影響しません。つまり、バイナリログのタイムスタンプ設定は、SYSDATE()
の呼び出しには効果をもたらさないということになります。
SYSDATE()
は同じステートメントの中でも、異なる値を返すことができ、また
SET TIMESTAMP
に影響を受けないため、これは非決定性であり、従ってステートメントに基づくバイナリロギングが使用されている場合、レプリケーションは安全でないということになります。これが問題になる場合は、行ベースのロギングを使用するか、または
--sysdate-is-now
オプションでサーバーを起動して、SYSDATE()
が NOW()
のエイリアスになるようにしてください。SYSDATE()
の非決定性は、その参照を含む式を評価する際にインデックスを使用できないことも意味します。
時刻、または日付時刻式
expr
の時刻部分を摘出し、文字列として返します。
mysql>SELECT TIME('2003-12-31 01:02:03');
-> '01:02:03' mysql>SELECT TIME('2003-12-31 01:02:03.000123');
-> '01:02:03.000123'
TIMEDIFF()
は、expr1
–
expr2
を時刻値として返します。expr1
と expr2
は時刻式、日付時刻式のいずれかになりますが、両者の型は同じにする必要があります。
mysql>SELECT TIMEDIFF('2000:01:01 00:00:00',
->'2000:01:01 00:00:00.000001');
-> '-00:00:00.000001' mysql>SELECT TIMEDIFF('2008-12-31 23:59:59.000001',
->'2008-12-30 01:01:01.000002');
-> '46:58:57.999999'
TIMESTAMP(
、expr
)TIMESTAMP(
expr1
,expr2
)
単一引数では、この関数は日付または日付時刻式
expr
を日付時刻値として返します。ふたつの引数では、時刻式
expr2
を日付、または日付時刻式
expr1
に加え、結果を日付時刻値として返します。
mysql>SELECT TIMESTAMP('2003-12-31');
-> '2003-12-31 00:00:00' mysql>SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
-> '2004-01-01 00:00:00'
TIMESTAMPADD(
unit
,interval
,datetime_expr
)
整数式 interval
を、日付または日付時刻式
datetime_expr
に加えます。interval
の単位は、次の値のひとつである
unit
引数によって提示されます:FRAC_SECOND
(マイクロ秒)、SECOND
、MINUTE
、HOUR
、DAY
、WEEK
、MONTH
、QUARTER
。
、または
YEAR
MySQL 5.1.24 以降では、この関数で
FRAC_SECOND
の代わりに
MICROSECOND
を使用できるようになっており、FRAC_SECOND
は非推奨となっています。
unit
値は、記載されているキーワードのどれかを使用するか、または
SQL_TSI_
の接頭辞での指定が可能です。たとえば、DAY
と SQL_TSI_DAY
は両方とも正当です。
mysql>SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
-> '2003-01-02 00:01:00' mysql>SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');
-> '2003-01-09'
TIMESTAMPDIFF(
unit
,datetime_expr1
,datetime_expr2
)
を返します。ただし、datetime_expr2
– datetime_expr1
datetime_expr1
と datetime_expr2
は日付式または日付時刻式です。式の一方が日付で他方が日付時刻であってもかまいません。日付値は必要に応じて、時刻部分が
'00:00:00'
の日付時刻として処理されます。結果 (整数)
の単位は、unit
引数によって提示されます。unit
の正当な値は、TIMESTAMPADD()
関数の説明で挙げられているものと同じです。
mysql>SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3 mysql>SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1 mysql>SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
-> 128885
この関数の日付または日付時刻引数の順序は、TIMESTAMP()
関数を 2
つの引数を指定して呼び出す場合の順序と反対になります。
これは
DATE_FORMAT()
関数のように使用されますが、format
文字列は時間、分、秒、マイクロ秒のみのための書式指定子を含む場合があります。ほかの指定子は
NULL
値か
0
を生成します。
time
値が
23
より大きな時間部を含む場合、%H
および %k
時間書式指定子が
0..23
の通常の範囲より大きな値を生成します。ほかの時間書式指定子は、時間値モジュロ
12 を作成します。
mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
->
'100 100 04 04 4'
秒に変換された time
引数を返します。
mysql>SELECT TIME_TO_SEC('22:23:00');
-> 80580 mysql>SELECT TIME_TO_SEC('00:39:38');
-> 2378
日付 date
をもって、日数
(0 年からの日数) を返します。
mysql>SELECT TO_DAYS(950501);
-> 728779 mysql>SELECT TO_DAYS('2007-10-07');
-> 733321
TO_DAYS()
は、カレンダーが変更された際に失われた日を考慮しないので、グレゴリオ暦
(1582)
の出現を優先される値と使用する目的はありません。1582
より前の日付
(またはほかのロケールでの後の年)
に関しては、この関数からの結果は信頼できません。詳細は
項7.7. 「MySQL が使用するカレンダーは ?」
を参照してください。
MySQL は 項6.3. 「日付と時刻型」
の規則を使用して、日付の 2 桁の年の値を 4
桁のフォームに変換することに留意してください。たとえば、'2008-10-07'
と '08-10-07'
は同一の日付と考えられます :
mysql> SELECT TO_DAYS('2008-10-07'), TO_DAYS('08-10-07');
->
733687, 733687
UNIX_TIMESTAMP()
、UNIX_TIMESTAMP(
date
)
引数なしで呼び出された場合、Unix
タイムスタンプ ('1970-01-01
00:00:00'
UTC 以来の秒数)
を符号なしの整数として返します。UNIX_TIMESTAMP()
の呼び出し時に date
引数を指定した場合には、その引数の値が
'1970-01-01 00:00:00'
UTC
からの秒数として返されます。date
に指定できるのは、DATE
文字列、DATETIME
文字列、TIMESTAMP
、YYMMDD
または YYYYMMDD
の書式を持つ数値、のいずれかです。サーバーは
date
を現在の時間帯の値として解釈し、UTC
の内部値に変換します。クライアントは、MySQL Server Time Zone Support
で説明されているように、独自の時間帯を設定することができます。
mysql>SELECT UNIX_TIMESTAMP();
-> 1196440210 mysql>SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');
-> 1196440219
UNIX_TIMESTAMP()
が TIMESTAMP
カラムに使用される際、関数は明示的な
「string-to-Unix-timestamp」
の変換なしに、内部タイムスタンプ値を直接返します。UNIX_TIMESTAMP()
に範囲外の日付を渡すと、0
が戻されます。
注記
:UNIX_TIMESTAMP()
および
FROM_UNIXTIME()
を使って
TIMESTAMP
値と Unix
タイムスタンプ値間を変換する場合、マッピングは双方向に対して
1 対 1
ではないので、変換は高損失になります。たとえば、現地時間帯の変更に対する変換のため、ふたつの
UNIX_TIMESTAMP()
がふたつの
TIMESTAMP
値を、同じ Unix
タイムスタンプ値にマップすることが考えられます。FROM_UNIXTIME()
はその値を、本来の
TIMESTAMP
値のひとつのみにマップをして返します。次が
CET
時間帯で TIMESTAMP
値を使用した例です :
mysql>SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+---------------------------------------+ | UNIX_TIMESTAMP('2005-03-27 03:00:00') | +---------------------------------------+ | 1111885200 | +---------------------------------------+ mysql>SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+---------------------------------------+ | UNIX_TIMESTAMP('2005-03-27 02:00:00') | +---------------------------------------+ | 1111885200 | +---------------------------------------+ mysql>SELECT FROM_UNIXTIME(1111885200);
+---------------------------+ | FROM_UNIXTIME(1111885200) | +---------------------------+ | 2005-03-27 03:00:00 | +---------------------------+
UNIX_TIMESTAMP()
カラムを減算するには、結果を符号付きの整数にキャストする方法もあります。項7.9. 「キャスト関数と演算子」
を参照してください。
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の
UTC 日付を 'YYYY-MM-DD'
または YYYYMMDD
フォーマットの値で返します。
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
-> '2003-08-14',
20030814
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の
UTC 時刻を 'HH:MM:SS'
または HHMMSS.uuuuuu
フォーマットの値で返します。
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
-> '18:07:53',
180753.000000
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の
UTC 日付を
'YYYY-MM-DDHH:MM:SS'
または
YYYYMMDDHHMMSS.uuuuuu
フォーマットの値で返します。
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
-> '2003-08-14
18:08:04', 20030814180804.000000
この関数は date
に週の数を返します。WEEK()
の、引数がふたつのフォームによって、週が日曜で始まるか、月曜で始まるか、また、戻り値の範囲は
0
から
53
か、1
から
53
かを指定することが可能です。mode
引数が省略された場合は、default_week_format
システム環境変数の値が使用されます。Server System Variables
を参照してください。
次のテーブルは、mode
引数がどのように作用するかを示したものです。
モード | 開始曜日 | 範囲 | Week 1 は下記の最初の週 … |
0 | 日曜日 | 0-53 | この年は日曜日 |
1 | 月曜日 | 0-53 | この年は 3 日以上 |
2 | 日曜日 | 1-53 | この年は日曜日 |
3 | 月曜日 | 1-53 | この年は 3 日以上 |
4 | 日曜日 | 0-53 | この年は 3 日以上 |
5 | 月曜日 | 0-53 | この年は月曜日 |
6 | 日曜日 | 1-53 | この年は 3 日以上 |
7 | 月曜日 | 1-53 | この年は月曜日 |
mysql>SELECT WEEK('2008-02-20');
-> 7 mysql>SELECT WEEK('2008-02-20',0);
-> 7 mysql>SELECT WEEK('2008-02-20',1);
-> 8 mysql>SELECT WEEK('2008-12-31',1);
-> 53
日付が先年の最後の週に該当する場合、2
、3
、6
、または
7
をオプションの
mode
引数として使用しなければ、MySQL は
0
を返すので注意してください :
mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
->
2000, 0
指定された日付は実際には 1999 年の 52
番目の週に含まれているので、MySQL の
WEEK()
関数から 52
が返されるべきであると考える方もおられるでしょう。我々が代わりに
0
を返すことにした理由は、この関数から
「指定された年の週数」
が返されるようにしたかったからです。そうすれば、この
WEEK()
関数を日付から日付部分を抽出する別の関数と組み合わせて使用する場合の信頼性が向上します。
結果において、与えられた日付の週の最初の日を含む年の評価をしたい場合は、0
、2
、5
、または
7
を、オプションの
mode
引数として使用してください。
mysql> SELECT WEEK('2000-01-01',2);
-> 52
その替わりとして、YEARWEEK()
関数を使用することもできます :
mysql>SELECT YEARWEEK('2000-01-01');
-> 199952 mysql>SELECT MID(YEARWEEK('2000-01-01'),5,2);
-> '52'
date
の曜日インデックス
(0
=
Monday、1
=
Tuesday、…6
=
Sunday) を返します。
mysql>SELECT WEEKDAY('2008-02-03 22:23:00');
-> 6 mysql>SELECT WEEKDAY('2007-11-06');
-> 1
1
から
53
の範囲で、日付の暦週を返します。WEEKOFYEAR()
は
WEEK(
に等価な互換性の関数です。
date
,3)
mysql> SELECT WEEKOFYEAR('2008-02-20');
-> 8
0
から
9999
の範囲、または
「zero」 日付には
0
で、date
の年を返します。
mysql> SELECT YEAR('1987-01-01');
-> 1987
YEARWEEK(
、date
)YEARWEEK(
date
,mode
)
日付の年と週を返します。mode
引数は、WEEK()
への mode
引数とまったく同様に作用します。結果の年は、日付引数の年によって、年の最初の週と、最後の週で異なる場合があります。
mysql> SELECT YEARWEEK('1987-01-01');
-> 198653
週の数は、WEEK()
が提示された年のコンテキストの週を返す場合、WEEK()
関数がオプションの引数
0
または
1
に戻すもの
(0
)
よって異なります。