MySQL関数:日付、時刻
前言
英語
日付date時刻time日付時刻datetimeタイムスタンプtimestamp
グリニッジ時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)から現在までの総秒数.Unixタイムスタンプ:1218206831(検証:select unix_timestamp(‘2008-08-08 22:47:11’);MySQLタイムスタンプ:2008-08-08 22:47:11
タイムゾーンタイムゾーン
取得日時
現在の日付
現在の時刻
現在の日付+時刻now()は、実行開始時に値が得られる.now()効果と同じ関数:localtime、localtime()、localtimestamp、localtimestamp()です.別のMySQLタイムスタンプ関数:current_timestamp、current_timestamp()とnow()のフォーマットは同じです.now()関数は簡単で覚えやすいので、他の関数の代わりにnow()を常に使用することをお勧めします. sysdate()関数実行時に動的に値を得る(一般的には少ない).テストは下記
現在のUTC日付時刻
わが国は東八時区にあるので、ローカル時間=UTC時間+8時間です.UTC時間は、業務が複数の国や地域に及ぶ場合に便利です.
MySQLパッチワーク日付、時間関数:makedate(year,dayofyear)、maketime(hour,minute,second)
へんかんかんすう
日付、時刻、文字列の相互転送
date_format(date,format)は、1つの日付を様々な文字列フォーマットtime_に変換することができる.format(time,format)は、1つの時間を様々な文字列フォーマットstr_に変換することができる.to_date(str, format) date_format、time_formatの逆変換
日付が変わる
to_days(date) from_days(days)
時間が秒を回す
time_to_sec(time) sec_to_time(seconds)
Unixタイムスタンプと日付の相互転送
MySQLタイムスタンプ変換、増減関数
unit:microsecond、second、minute、hour、day、week、month、quarter、year
元の日付、時刻の減算:
MySQL日付増減関数:date_add()、date_sub()
MySQL時間増減関数:datediff(date 1,date 2)、timediff(time 1,time 2)
注意:timediff(time 1,time 2)関数の2つのパラメータタイプは同じでなければなりません.
タイムゾーン変換関数
タイムゾーン変換はdate_でも可能ですadd, date_sub,timestampaddが実現する.
MySQL取得国地域時間フォーマット関数:get_format()
MySQL get_format()関数は実際に使用する機会が少ない.
MySQL日時Extract(選択)関数
日付、時刻、年、四半期、月、日、時間、分、秒、マイクロ秒の各セクションを選択します.
Extract()関数、類似の機能を実現
MySQL Extract()関数は、date()、time()の機能がない場合を除き、その他の機能はすべて揃っています.「day_」も選択されていますMicrosecondなどの機能.注意ここではdayとmicrosecondのみを選択するのではなく、日付のday部分からmicrosecond部分まで選択します.MySQL Extract()関数の唯一の悪い点は、キーボードを何度も叩く必要があることです.
MySQL dayof...関数:dayofweek()、dayofmonth()、dayofyear()
1週間、1月、1年の日付パラメータをそれぞれ返します.
日付‘2008-08-08’は、1週間で6日目(1=サンデー、2=Monday、...、7=Saturday);1月の8日目.一年の221日目.
MySQL week...関数:week()、weekofyear()、dayofweek()、weekday()、yearweek()
MySQL week()関数は、2つのパラメータがあります.具体的にはマニュアルを参照してください.weekofyear()はweek()と同様に、「ある日」が1年の何週目にあるかを計算します.weekofyear(@dt)はweek(@dt,3)に等価である.
MySQL weekday()関数は、dayofweek()と同様に、1週間の「ある日」の位置を返します.違いは参考の基準でweekday:(0=Monday,1=Tuesday,...,6=Sunday);dayofweek:(1 = Sunday, 2 = Monday, …, 7 = Saturday)
MySQL yearweek()関数は、year(2008)+week位置(31)を返します.
MySQLは、曜日と月の名前関数を返します:dayname()、monthname()
MySQL last_day()関数:月の最終日を返します
MySQL last_day()関数はとても役に立ちます.例えば、現在の月に何日あるかを手に入れたいです.
英語
日付date時刻time日付時刻datetimeタイムスタンプtimestamp
グリニッジ時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)から現在までの総秒数.Unixタイムスタンプ:1218206831(検証:select unix_timestamp(‘2008-08-08 22:47:11’);MySQLタイムスタンプ:2008-08-08 22:47:11
タイムゾーンタイムゾーン
取得日時
現在の日付
select curdate(), current_date(), current_date; // 2018-06-21
現在の時刻
select curtime(), current_time(), current_time; // 15:13:17
現在の日付+時刻
select now(), sysdate(), localtime, localtime(), localtimestamp, localtimestamp(); // 2018-06-21 15:13:17
select current_timestamp, current_timestamp(); // MySQL now()
select now(), sysdate(), current_timestamp, current_timestamp(), localtime, localtime(), localtimestamp, localtimestamp(),
sleep(2),
now(), sysdate(), current_timestamp, current_timestamp(), localtime, localtime(), localtimestamp, localtimestamp();
現在のUTC日付時刻
わが国は東八時区にあるので、ローカル時間=UTC時間+8時間です.UTC時間は、業務が複数の国や地域に及ぶ場合に便利です.
select utc_timestamp(), utc_date(), utc_time(), now();
// | 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |
MySQLパッチワーク日付、時間関数:makedate(year,dayofyear)、maketime(hour,minute,second)
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'
へんかんかんすう
日付、時刻、文字列の相互転送
date_format(date,format)は、1つの日付を様々な文字列フォーマットtime_に変換することができる.format(time,format)は、1つの時間を様々な文字列フォーマットstr_に変換することができる.to_date(str, format) date_format、time_formatの逆変換
日付が変わる
to_days(date) from_days(days)
時間が秒を回す
time_to_sec(time) sec_to_time(seconds)
Unixタイムスタンプと日付の相互転送
unix_timestamp()
unix_timestamp(date)
from_unixtime(unix_timestamp)
from_unixtime(unix_timestamp, format)
select unix_timestamp(); -- 1529502063
select unix_timestamp('2018-06-20'); -- 1529424000
select unix_timestamp('2018-06-20 21:43:20'); -- 1529502200
select from_unixtime(1529502063); -- '2018-06-20 21:41:03'
select from_unixtime(1529424000); -- '2018-06-20 00:00:00'
select from_unixtime(1529502200); -- '2018-06-20 21:43:20'
select from_unixtime(1529502200, '%Y-%m-%d %H:%i:%s'); -- '2018-06-20 21:43:20'
MySQLタイムスタンプ変換、増減関数
timestamp(date) -- date to timestamp
timestamp(date, time) -- date + time
timestampadd(unit, interval, datetime_expr) --
timestampdiff(unit, datetime_expr1, datetime_expr2) --
unit:microsecond、second、minute、hour、day、week、month、quarter、year
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01
-- MySQL timestampadd() date_add()
select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00
-- MySQL timestampdiff() datediff() ,datediff() (date)
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12
select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7
元の日付、時刻の減算:
select (UNIX_TIMESTAMP(atime) - UNIX_TIMESTAMP(btime)) sec from A; --
select (TIME_TO_SEC(atime) - TIME_TO_SEC(btime)) sec from A; --
-- ,
select (atime - btime) sec from A;
MySQL日付増減関数:date_add()、date_sub()
set @dt = now();
-- date_add()
select date_add(@dt, interval 1 day); -- 1
select date_add(@dt, interval 1 hour); -- 1
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- 1
select date_add(@dt, interval '01:15:30' hour_second); -- 1 15 30
select date_add(@dt, interval '1 01:15:30' day_second); -- 1 1 15 30
-- date_sub()
select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second); -- 1 1 1 1
MySQL時間増減関数:datediff(date 1,date 2)、timediff(time 1,time 2)
-- datediff(date1, date2): date1 - date2,
select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7
-- timediff(time1, time2): time1 - time2, time
select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
select timediff('08:08:08', '00:00:00'); -- 08:08:08
注意:timediff(time 1,time 2)関数の2つのパラメータタイプは同じでなければなりません.
タイムゾーン変換関数
convert_tz(dt,from_tz,to_tz)
select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00
タイムゾーン変換はdate_でも可能ですadd, date_sub,timestampaddが実現する.
select date_add('2008-08-08 12:00:00', interval -8 hour); -- 2008-08-08 04:00:00
select date_sub('2008-08-08 12:00:00', interval 8 hour); -- 2008-08-08 04:00:00
select timestampadd(hour, -8, '2008-08-08 12:00:00'); -- 2008-08-08 04:00:00
MySQL取得国地域時間フォーマット関数:get_format()
MySQL get_format()関数は実際に使用する機会が少ない.
get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal'
-- MySQL get_format()
select get_format(date,'usa') ; -- '%m.%d.%Y'
select get_format(date,'jis') ; -- '%Y-%m-%d'
select get_format(date,'iso') ; -- '%Y-%m-%d'
select get_format(date,'eur') ; -- '%d.%m.%Y'
select get_format(date,'internal') ; -- '%Y%m%d'
select get_format(datetime,'usa') ; -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'jis') ; -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'iso') ; -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'eur') ; -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'internal') ; -- '%Y%m%d%H%i%s'
select get_format(time,'usa') ; -- '%h:%i:%s %p'
select get_format(time,'jis') ; -- '%H:%i:%s'
select get_format(time,'iso') ; -- '%H:%i:%s'
select get_format(time,'eur') ; -- '%H.%i.%s'
select get_format(time,'internal') ; -- '%H%i%s'
MySQL日時Extract(選択)関数
日付、時刻、年、四半期、月、日、時間、分、秒、マイクロ秒の各セクションを選択します.
set @dt = '2008-09-10 07:15:30.123456';
select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456
Extract()関数、類似の機能を実現
set @dt = '2008-09-10 07:15:30.123456';
select extract(year from @dt); -- 2008
select extract(quarter from @dt); -- 3
select extract(month from @dt); -- 9
select extract(week from @dt); -- 36
select extract(day from @dt); -- 10
select extract(hour from @dt); -- 7
select extract(minute from @dt); -- 15
select extract(second from @dt); -- 30
select extract(microsecond from @dt); -- 123456
select extract(year_month from @dt); -- 200809
select extract(day_hour from @dt); -- 1007
select extract(day_minute from @dt); -- 100715
select extract(day_second from @dt); -- 10071530
select extract(day_microsecond from @dt); -- 10071530123456
select extract(hour_minute from @dt); -- 715
select extract(hour_second from @dt); -- 71530
select extract(hour_microsecond from @dt); -- 71530123456
select extract(minute_second from @dt); -- 1530
select extract(minute_microsecond from @dt); -- 1530123456
select extract(second_microsecond from @dt); -- 30123456
MySQL Extract()関数は、date()、time()の機能がない場合を除き、その他の機能はすべて揃っています.「day_」も選択されていますMicrosecondなどの機能.注意ここではdayとmicrosecondのみを選択するのではなく、日付のday部分からmicrosecond部分まで選択します.MySQL Extract()関数の唯一の悪い点は、キーボードを何度も叩く必要があることです.
MySQL dayof...関数:dayofweek()、dayofmonth()、dayofyear()
1週間、1月、1年の日付パラメータをそれぞれ返します.
set @dt = '2008-08-08';
select dayofweek(@dt); -- 6
select dayofmonth(@dt); -- 8
select dayofyear(@dt); -- 221
日付‘2008-08-08’は、1週間で6日目(1=サンデー、2=Monday、...、7=Saturday);1月の8日目.一年の221日目.
MySQL week...関数:week()、weekofyear()、dayofweek()、weekday()、yearweek()
set @dt = '2008-08-08';
select week(@dt); -- 31
select week(@dt,3); -- 32
select weekofyear(@dt); -- 32
select dayofweek(@dt); -- 6
select weekday(@dt); -- 4
select yearweek(@dt); -- 200831
MySQL week()関数は、2つのパラメータがあります.具体的にはマニュアルを参照してください.weekofyear()はweek()と同様に、「ある日」が1年の何週目にあるかを計算します.weekofyear(@dt)はweek(@dt,3)に等価である.
MySQL weekday()関数は、dayofweek()と同様に、1週間の「ある日」の位置を返します.違いは参考の基準でweekday:(0=Monday,1=Tuesday,...,6=Sunday);dayofweek:(1 = Sunday, 2 = Monday, …, 7 = Saturday)
MySQL yearweek()関数は、year(2008)+week位置(31)を返します.
MySQLは、曜日と月の名前関数を返します:dayname()、monthname()
set @dt = '2008-08-08';
select dayname(@dt); -- Friday
select monthname(@dt); -- August
MySQL last_day()関数:月の最終日を返します
select last_day('2008-02-01'); -- 2008-02-29
select last_day('2008-08-08'); -- 2008-08-31
MySQL last_day()関数はとても役に立ちます.例えば、現在の月に何日あるかを手に入れたいです.
select now(), day(last_day(now())) as days;