mysql date format timestamp functions with examples
この包括的なチュートリアルでは、現在の日付、日付の追加、時刻の追加など、MySQLの日付形式とタイムスタンプ関数の構文と例を提供します。
このチュートリアルでは、MySQLの日付と時刻のデータ型と、日付と時刻の値を操作するためにMySQLが提供するさまざまな関数について詳しく学習します。
MySQLは、日付の加算と減算、2つの日付の違いの検出、指定された日時値の特定の部分の抽出など、さまざまな操作を実行するための優れた関数/ユーティリティのセットを提供します。
学習内容:
MySQLの日付形式と時刻関数
これらの関数は、MySQLテーブルで日時列の値に対する操作が必要な場合は常に非常に重要です。
前提条件
チュートリアルで使用されている例を実行するには、MySQLインストールのローカルセットアップが必要です。
= >> MySQLのインストールについては、チュートリアルを参照してください ここに。
日付と時刻のデータ型
データ型には、YEAR、DATE、TIME、DATETIME、およびTIMESTAMPが含まれます。
MySQLは、5つの異なるデータ型(YEAR、DATE、TIME、DATETIME、およびTIMESTAMP)を使用して日付と時刻の値を格納します。 MySQLが提供する日付形式と日付時間関数について詳しく説明する前に、以下の表でこれらを簡単に理解してみましょう。
タイプ | 構文 | 範囲 | 記憶 | フォーマット |
---|---|---|---|---|
%H | 時間-00-23 | |||
年 | 年の部分だけを保存するために使用されます colName 年 | 1901-2155 | 1 | 「YYYY」 |
日付 | DATE部分のみを格納するために使用されます。 colName 日付 | 「1000-01-01」から「9999-12-31」 | 3 | 「YYYY-MM-DD」 |
時間 | TIME部分のみを格納するために使用されます。 colName 時間 colName TIME(n) n->精度または小数成分 | 「00:00:00」から「23:59:59」 | 3 + fractionalStorage | ‘hh:mm:ss。(fraction)’ |
日付時刻 | 日付と時刻の両方を保存するために使用されます colName 日付時刻 colName DATETIME(n) n->精度または小数成分 | '1000-01-01 00:00:00.000000'から '9999-12-31 23:59:59.999999' | 5 + fractionalStorage | 「YYYY-MM-DDhh:mm:ss。(fraction)」 |
タイムスタンプ | 日付と時刻の両方を保存するために使用されます colName タイムスタンプ colName タイムスタンプ(n) n->精度または小数成分 | '1970-01-01 00:00:01'UTCから' 2038-01-19 03:14:07'UTC。 | 4 + fractionalStorage | 「YYYY-MM-DDhh:mm:ss。(fraction)」 |
ここで、フラクショナルストレージのメモリ要件を理解します。指定された小数成分に応じて、TIME、DATETIME、およびTIMESTAMPデータ型の場合、消費されるメモリは異なります。
小数桁数 | メモリ(バイト単位) |
---|---|
0 | 0 |
1-2 | 1 |
3-4 | 二 |
5-6 | 3 |
上記の表を使用して、 例えば、 列タイプが– TIME(5)の場合。
その場合、使用される合計メモリは=> TIMEデータ型で使用されるメモリ+5つの小数部分で使用されるメモリ=> 3 + 3 => 6バイトになります。
これらすべてのデータ型を単一のテーブルの一部として説明し、各型に割り当てられている値を見てみましょう。
CREATE TABLE datetime_illustration(year_col YEAR, date_col DATE, time_col TIME, time_col_fractional TIME(2), datetime_col DATETIME, datetime_col_fractional DATETIME(6), timestamp_col TIMESTAMP, timestamp_col_fractional TIMESTAMP(6))
現在のタイムスタンプである「now()」関数を使用して、テーブルに1行を挿入します。この関数を使用すると、列のデータ型に応じて、現在の日付と時刻の必要な部分のみがトリミング/挿入されることに注意してください。
insert into datetime_illustration values (now(), now(), now(), now(), now(), now(), now(), now()); select * from datetime_illustration
それでは、テーブルの内容を見て、さまざまな列のデータを分析してみましょう。
select * from datetime_illustration
したがって、上記のデータを次のように要約します。
- すべての列には、データ型ごとに値が割り当てられています。 例えば、 最初の列– YEAR –は、現在のタイムスタンプである「now()」関数を使用して挿入しましたが、挿入された値は、現在の日時の年の部分、つまり2020です。
- now()関数は、現在の日時を次の形式で返します– dd:mm:yyyy hh:mm:ss
- 列名の小数部分に「_fractional」があることに注意してください。指定された小数桁数に応じて、小数値がキャプチャされて表示されます。
DATETIMEフィールドとTIMESTAMPフィールドの自動初期化と更新
実際のシナリオでは、ほとんどの場合、DATETIMEの初期化と更新は自動になるように構成されています。
これが意味するのは、一般的にテーブルには次のような2つの列があるということです– created_time そして update_time 。
created_time列は、行が挿入されるたびに現在のシステム時刻の値を取得するように構成され、同様に、updated_timeは、テーブルの特定の行に更新が行われるたびに現在のシステム時刻を取得するように構成されます。
その点に注意してください、 行の挿入時には、created_timeとupdated_timeの両方が同じ値になります。その後の行の更新はすべて、フィールドupdated_timeを現在のシステム時刻で更新することになります。
自動初期化と更新を備えたそのようなテーブルを1つ作成してみましょう。
という名前のテーブルを作成します 株価 これには、銘柄記号、価格、および日時フィールド–created_onおよびupdated_onがあります。
create table stock_price(symbol varchar(100), price decimal(10,2), created_on datetime default current_timestamp, updated_on datetime default current_timestamp on update current_timestamp)
テーブルにいくつかのデータを挿入します。
insert into stock_price(symbol,price) values('AMZN','3000.10');
結果を見てみましょう(シンボルと価格の値を入力したばかりです。日時列、created_on、updated_onは自動的に初期化される必要があります)
select * from stock_price
diffコマンドを使用して2つのファイルを比較する方法
以下に示すように、「AMZN」株の株価を更新してみてください。
update stock_price set price='3005.15' where symbol='AMZN'
そして今、テーブルのデータを再度フェッチします。 update_timeの値が、stock_priceの更新が発生した時間に変更されるのを確認する必要があります。
select * from stock_price
上記の例から、updated_on列の値が更新タイムスタンプに更新されていることがわかります。
MySQLの日付と時刻の関数
MySQLは、日付と時刻に関連するデータ型を持つ列に多数の関数を提供します。
これらの関数は、一般的に、
- データのクエリ中に、保存された日付を必要な形式に変換します。
- 列の現在の値に間隔を追加したり、現在の設定値から時間を減算したりするなど、既存の日時フィールドを操作します。
- 保存された値から特定の情報を抽出し、 例えば、 保存された値から「日付」の部分だけを抽出し、次のようなさらなるフィルタリング/操作を実行します GROUP BY 日付などで
このセクションでは、最も一般的に使用される日付と時刻の関数に対する例を示します。
>>参照 ここに そのような関数の完全なリストについては。
#1)現在の日付と時刻を取得する
MySQLは、日付と時刻の現在の値をフェッチするための多くの便利な関数/定数値を提供し、通常、日時列に値を格納するとき、または現在の日付と時刻の値から特定の範囲に対して取得するときに使用されます。
a)curdate()
この関数は現在の日付を取得します。 curdate()関数の他の同義語は次のとおりです。 – CURRENT_DATE、CURRENT_DATE()、CURRENT_DATE( fractionalDigits )
この関数の例を以下に示します。
select curdate(), CURRENT_DATE(), CURRENT_DATE
b)カータイム()
この関数は現在の時刻を取得します。小数部分(最大6桁)を取得するには、括弧内の小数をcurtime(3)として指定します。これにより、システム時間の現在の値が小数点以下3桁までフェッチされます。
curtime()関数の他の同義語は次のとおりです- CURRENT_TIME、CURRENT_TIME()、CURRENT_TIME( fractionalDigits )
select curtime(), CURRENT_TIME(), CURRENT_TIME, curtime(6), CURRENT_TIME(6)
c)now()
この関数は、現在のタイムスタンプを取得します。括弧内に小数部を指定し、 例えば、 now(4)は、現在のタイムスタンプを小数点以下4桁までフェッチします。
now()関数の他の同義語は次のとおりです。 CURRENT_TIMESTAMP、CURRENT_TIMESTAMP()、CURRENT_TIMESTAMP( fractionalDigits )
select now(), CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP, now(6), CURRENT_TIMESTAMP(6)
#2)日付の加算と減算
MySQLは、列に格納されている既存の値に日付と時刻の値を加算および減算する機能、またはデータのクエリ中に使用される関数を提供します。例を使って機能を理解します。
以下の表を使用して、減算への日時の加算を実行します。
create table datetime_calc(datecol DATE, timecol TIME, datetimecol DATETIME(6));
以下に示すように、INSERTステートメントを使用して上記の表にいくつかのエントリを挿入します。
insert into datetime_calc values(now(), now(), now(6)); insert into datetime_calc values(now(), now(), now(6));
上記の表にクエリを実行して、保存されているデータを確認しましょう。
テーブルの列を更新することに加えて、特定の日付/時刻または日時の値を適用することにより、SELECTステートメントを使用して日時操作を直接実行できます。
a)ADDDATE()
名前が示すように、この関数は、DATE、DATETIME、またはTIMESTAMPのタイプの既存の日付値に日付を追加するために使用されます。
構文:
ADDDATE(inputTimeValue/fieldName, noOfDays)
ADDDATEは、間隔値を使用して呼び出すこともできます。これには、DAYS、WEEK、HOUR、MINUTE、SECONDなどがあります。
その場合、構文は次のように変更されます。
ADDDATE(inputTimeValue/fieldName, Interval intervalUnit)
これをよりよく理解するために、いくつかの例を見てみましょう。
SELECT ADDDATE('2020-08-15', 31); // output '2020-09-15'
2番目の引数として整数値が指定された場合、指定された日付に追加される日数として扱われます。
間隔が– MONTH、HOUR、およびWEEKであるその他の例は次のとおりです。
SELECT ADDDATE('2020-01-02', INTERVAL 1 MONTH); //output 2020-02-02
SELECT ADDDATE('2020-01-02 12:11:11', INTERVAL 5 HOUR); //output 2020-01-02 17:11:11
SELECT ADDDATE('2020-01-02 12:11:11', INTERVAL 1 WEEK); //output 2020-01-09 12:11:11
間隔の他の例としては、MINUTE、SECOND、QUARTERなどがあります。
既存のテーブルの列を更新するには、 例えば、 「datecol」値を更新し、列のすべての日付に10日を追加する場合は、「datetime_calc」を作成したテーブルの場合、 以下のようにクエリを使用できます。
update datetime_calc set datecol=ADDDATE(datecol, 30);
ここで、SELECT *を使用して、datetime_calcテーブルのすべてのデータを表示します。
SELECT * FROM datetime_calc
上記の出力から、datecol列の値が、既存の値に30日を追加した後、2020年8月25日から2020年9月24日に更新されたことがわかります。
b)ADDTIME()
ADD_DATEと同様に、ADD_TIME関数を使用して、既存のDATETIME、TIME、またはTIMESTAMP列/フィールドまたは指定された入力に時間コンポーネントを追加できます。
構文:
ADDTIME(inputTimeValue/fieldName, ‘hh:mm:ss’)
例:
SELECT ADDTIME('2020-01-02 12:11:11', '01:10:00'); // output 2020-01-02 13:21:11
テーブルの日時列を、その列内のすべての値に5時間を追加して更新する例を見てみましょう。 クエリの例は次のとおりです。
update datetime_calc set datetimecol=ADDTIME(datetimecol, '05:00:00')
前のテーブル出力:
// output '2020-08-25 05:53:37.851379' '2020-08-25 05:53:39.711515'
後のテーブル出力:
// output '2020-08-25 10:53:37.851379' '2020-08-25 10:53:39.711515'
c)SUBDATE()
SUBDATEはADDDATEとまったく同じですが、唯一の違いは、SUBDATEが指定された間隔/番号を減算することです。列/フィールド値からの日数。
構文:
SUBDATE(inputTimeValue/fieldName, noOfDays)
SUBDATE()関数を説明するためにいくつかの例を見てみましょう。
SELECT SUBDATE('2020-08-15', 31); // output 2020-07-15
以下の例は、時間/日、週などで指定された間隔を減算することを示しています。
SELECT SUBDATE('2020-01-02 12:11:11', INTERVAL 1 WEEK); // output 2019-12-26 12:11:11 SELECT SUBDATE('2020-01-02 12:11:11', INTERVAL 12 HOUR); // output 2020-01-02 00:11:11
d)SUBTIME()
SUBTIMEは、指定された日時または時間フィールドの値から「hh:mm:ss」で指定された時間値を減算します。
構文:
SUBTIME(inputTimeValue/fieldName, ‘hh:mm:ss’)
SUBTIME()関数の例:
SELECT SUBTIME('2020-01-02 12:11:11', '02:20:05'); // output 2020-01-02 09:51:06
#3)日付の変換
MySQLは、日付をある形式から別の形式に変換することから、さまざまな組み込み関数を提供します。日付を変換するために最も広く使用されている関数を見てみましょう。
a)CONVERT_TZ()
この関数は、日付をあるタイムゾーンから別のタイムゾーンに変換するために使用されます。これらは、データがUTCタイムゾーンを使用して保存されていると想定し、表示中に選択したタイムゾーンに変換する場合に便利です。
例えば、 UTCをMET(中央ヨーロッパ時間)に変換します。
SELECT CONVERT_TZ('2004-01-01 12:00:00', 'UTC', 'MET');
ヒント/注意事項
#1) MySQLシステムデータベース内のすべてのタイムゾーンのリストを取得するには、以下のクエリを実行し、任意のタイムゾーン名を使用して、あるタイムゾーンから別のタイムゾーンに変換します。
select * from mysql.time_zone_name
#二) タイムゾーン情報は、MySQLサーバーインスタンスのインストール中に入力されます。上記のクエリの結果がNULLの場合、最初にMySQLシステムテーブルにタイムゾーン値を入力する必要がある場合があります。
>>これに従ってください リンク これに関する詳細については。
b)FROM_UNIXTIME()
この関数は、特定のUNIXTIMESTAMPをMySQL日時形式に変換するために使用されます。
SELECT FROM_UNIXTIME(1547430881); //output 2019-01-14 07:24:41
c)UNIX_TIMESTAMP
この関数は、特定のMySQL日時をUNIXタイムスタンプに変換するために使用されます。
SELECT UNIX_TIMESTAMP('2020-03-15 07:10:56.123') //output 1584236456.123
UNIXタイムスタンプは、UTCの1970年1月1日から経過した秒数の形式で特定の日付を表します。
>>参照 ここに UNIXタイムスタンプの詳細については。
#4)DateTime列の特定の部分をフェッチする
場合によっては、テーブル内の日時フィールド値の日付値の特定の部分をフェッチすることが必要になります。 例えば 、あなたが数を数えたいとしましょう。注文の数を日、週、月などでグループ化します。
そして、一般的に言って、これらの値はテーブルの個別の列として保存されません– 例えば、 – created_onのような1つの列だけがあり、これは日時フィールドであり、– date、month、yearなどのような個別の列はありません。
MySQLには、DateTimeフィールドから目的の部分を抽出できる便利なメソッドが多数用意されています。
日時の値が–であるとします。 ‘2020-03-15 07:10:56.123’
上記の日時値を使用した例を使用して、広く使用されている関数のいくつかを見てみましょう。
a)DAYを抽出します
MySQLは、DAY情報を抽出するために次の関数を提供します。
日付() - DateTimeフィールドのDATE()部分を抽出します。
Android携帯用の最高の音楽ダウンローダーは何ですか
SELECT DATE('2020-03-15 07:10:56.123'); //output 2020-03-15
DAYOFMONTH() - 日時のDAY部分を抽出します。その本質的には月の日です。この関数を使用するための省略形はDAY()です
SELECT DAYOFMONTH('2020-03-15 07:10:56.123'); //output 15
曜日 () - 曜日に対応するインデックスを抽出します– 1〜7の値。
SELECT DAYOFWEEK('2020-03-15 07:10:56.123'); //output 1
DAYOFYEAR()– いいえの観点から日を抽出します。 1年で経過した日数。値の範囲は1〜365(うるう年の場合は366)です。
SELECT DAYOFYEAR('2020-03-15 07:10:56.123'); //output 75
DAYNAME()– 月曜日から日曜日までの範囲の値で日の名前を抽出します。
SELECT DAYNAME('2020-03-15 07:10:56.123'); //output Sunday
b)時間を抽出する
MySQLは、TIME値を抽出するために次の関数を提供します。
TIME()– 時間部分をhh:mm:ssの形式で抽出します(使用可能な場合は秒の小数部コンポーネントを使用)。
SELECT TIME('2020-03-15 07:10:56.123'); //output '07:10:56.123'
HOUR()– フィールド/値の時間部分を抽出します– 1〜24の範囲の値。
SELECT HOUR('2020-03-15 07:10:56.123'); //output 7
分() - 指定された日時の分部分を抽出します–値は1〜60の範囲です。
SELECT MINUTE('2020-03-15 07:10:56.123'); //output 10
SECOND()– 指定された日時の秒部分を抽出します–値は1〜60の範囲です。
SELECT SECOND('2020-03-15 07:10:56.123'); //output 56
MICROSECOND()– 指定されたDateTimeのマイクロ秒部分を抽出します。
SELECT MICROSECOND('2020-03-15 07:10:56.123'); //output 123000
c)月を抽出する
月() - 月のインデックスを抽出します。 1〜12の範囲の値。
SELECT MONTH('2020-03-15 07:10:56.123'); //output 3
MONTHNAME() –月の名前を抽出します。 1月から12月までの値。
SELECT MONTHNAME('2020-03-15 07:10:56.123'); //output March
d)WEEK、YEAR、およびQUARTERを抽出します
週間() –指定されたDateTime値の年の週を抽出します。
SELECT WEEK('2020-03-15 07:10:56.123'); //output 11
YEAR()– 日付のYEAR部分を抽出します。
SELECT YEAR('2020-03-15 07:10:56.123'); //output 2020
QUARTER()– 年に関して四半期を抽出します。 1から4の範囲の値。
SELECT QUARTER('2020-03-15 07:10:56.123'); //output 1
上記のすべての方法は、主にデータ分析と予測に使用されます– 例えば、 月のどの日がいいえでしたか。最高注文数など
#5)2つの日付の違いを見つける
指定された2つの日時フィールド値の違いを見つけるために、MySQLにはDATEDIFF()関数とTIMEDIFF()関数が用意されています。
a)DATEDIFF()
日数での2つのDateTime(またはdate)値の差を返します。
構文:
DATEDIFF(DateTime1, DateTIme2)
DATEDIFF()関数の例をいくつか見てみましょう。
DATEDIFF()はDateTime入力を使用しています。
SELECT DATEDIFF('2020-01-05 12:11:11.11', '2020-01-03 14:11:11') //output 2
日付入力を使用するDATEDIFF()。
SELECT DATEDIFF('2020-04-02', '2020-01-04') //output 89
負の出力を持つ日付入力を使用するDATEDIFF()。
SELECT DATEDIFF('2020-04-02', '2020-04-05') //output -3
b)TIMEDIFF()
この関数は、TIMEDIFF()関数が呼び出された入力に応じて、オプションの小数部分を使用して「hh:mm:ss」で表される2つの日時(または時刻)値の差を返します。
構文:
TIMEDIFF(DateTime1, DateTIme2)
上記の構文に従って、TIMEDIFF()関数の結果は、expression =>に対して「hh:mm:ss」として指定された時間になります。 DateTime1 - DateTIme2
その点に注意してください、
- 式1と式2はどちらも同じタイプです。つまり、ある日時と別のちょうど時刻はNULL値を返します。
- Expression1とExpression2を単なる日付にすることはできません。 例: DATEDIFF(2020-01-01、2020-02-01)はNULLを返します。
TIMEDIFF()関数の例をいくつか見てみましょう。
DateTime入力を使用するTIMEDIFF()。
SELECT TIMEDIFF('2020-01-4 12:11:11.11', '2020-01-03 12:11:11') //output 24:00:00.11
時間入力を使用するTIMEDIFF()。
SELECT TIMEDIFF('12:11:11.11', '02:12:11') //output 09:59:00.11
負の出力を返すTIMEDIFF()。
SELECT TIMEDIFF('2020-01-01 12:11:11.11', '2020-01-03 12:11:11') //output -47:59:59.89
その点に注意してください DATEDIFF()とTIMEDIFF()はどちらも、最初の引数が2番目の引数よりも小さい場合は常に負の値を返すことができます。つまり、最初の引数は2番目の引数と比較して古いdateTime値です。
#6)日付のフォーマット
DATE_FORMAT()関数は、指定された形式で日付を変換します。
例えば: 必要な日付をmm / yyyy形式に変換します。
SELECT DATE_FORMAT('2020-03-15 07:10:56.123', '%m/%Y'); //output 03/2020
フォーマット指定子を使用するためのいくつかの一般的な規則を見てみましょう。
フォーマット | 説明 |
---|---|
%Y | 年の値-4桁 |
%Y | 年の値-2桁 |
%M | 月の名前のような-1月、2月 |
%m | 月名-数値 |
%d | 曜日 |
%h | 時間-00-12 |
%私 | 議事録 |
%S | 秒 |
要件に応じて、これらの形式指定子を使用でき、MySQLDateTimeを必要な形式に変換できます。
例: dd / mm / yyyy形式への変換は次のように指定できます。
SELECT DATE_FORMAT('2020-03-15 07:10:56.123', '%d/%m/%Y'); //output 15/03/2020
>>参照 ここに MySQLでサポートされているフォーマット指定子の完全なリストについては。
よくある質問
Q#1)MySQLに保存されている日付の年の部分を変更するにはどうすればよいですか?
回答: 特定の日付の特定の数値に年の値を更新するために、 DATE_ADD 関数を作成し、現在の日付と変更する年の差を追加します。
例えば: 日付が「2020-03-1507:10:56.123」で、日付の年の部分を2018に変更したいとします。これを行うには、
- まず、更新する年と実際の日付の年の違いを見つけることができます。これは、YEAR関数を使用して実現できます。
SELECT (2018 - year('2020-03-15 07:10:56.123')) //output -2
- これで、DATE_ADD関数を使用して、この-2を年間隔として追加できます。
SELECT DATE_ADD('2020-03-15 07:10:56.123', INTERVAL -2 year) //output 2018-03-15 07:10:56.123000
日付の年の部分が変更されたことがわかります。
日付の特定の部分を変更する必要がある場合は、同じ一連の手順を使用できます。 例: 月、日など
Q#2)MySQLで必要な形式で日時を変更するにはどうすればよいですか?
コンピューターでネットワークセキュリティキーを見つける方法
回答: MySQLには、クエリ結果に表示するために必要なフォーマット済み文字列に日時を変換するDATE_FORMAT()関数が用意されています。
>>参照 ここに フォーマット指定子の完全なリストについては。
例: 日時をフォーマット– dd:mm:yyyyに変換するには、次のクエリを使用できます。
SELECT DATE_FORMAT('2020-03-15 07:10:56.123', '%d:%m:%Y');
Q#3)MySQLの日付形式は何ですか?
回答: MySQLの標準の日付形式は「dd-mm-yyyyhh:mm:ss」です。{ 小数部分 }
MySQLに保存されているサンプル日時値 -「2020-03-1507:10:56.123」
Q#4)MySQLでDATEデータ型のテーブルを作成する方法。
回答: MySQLは、必要に応じて日付と時刻の値を格納するためのさまざまなデータ型を提供します。日付を保存するだけの場合–DATEデータ型を使用できます。データはyyyy-mm-ddの形式で保存されます。
列をDATE型として指定する例を見てみましょう。
CREATE TABLE date_illustration(date_col DATE);
結論
このチュートリアルでは、日付と時刻の値を格納するためにMySQLが提供するさまざまなデータ型と、MySQLが提供するさまざまな使いやすい関数を使用して日時の値の計算を実行する方法について学習しました。
また、特定のDateTime値の特定の部分の抽出、特定の日付の別の形式への変換、既存の値への日付/時刻値の追加など、さまざまな機能についても学びました。
DateTimeはMySQLで最も重要なデータ型の1つであり、イベントが発生したときの詳細を取得するために非常に重要です。
これらの値は、データアナリスト/機械学習/価格設定モデルなどで非常に広く使用されており、機械学習モデルを準備して重要なビジネス上の決定を行うために、日付のスライスとダイシングが多数行われます。