MySQL の一般的な日付比較および計算関数

MySQL の一般的な日付比較および計算関数

MySql での時間比較の実装

unix_timestamp()

unix_timestamp 関数は、引数を 1 つ取ることも、引数をまったく取らないこともできます。

戻り値は符号なし整数です。パラメータがない場合、1970年1月1日00:00:00から経過した秒数を返します。

パラメータが使用され、それが時間型または時間型の文字列表現である場合、それは 1970-01-01 00:00:00 から指定された時間までの秒数になります。

この関数を使用すると、時間の比較を符号なし整数の比較に変換するのが自然です。

たとえば、時間が範囲内であるかどうかを判断する

unix_timestamp( 'start ') と unix_timestamp( 'end') の間の unix_timestamp( time )

以下は日付関数を使用した例です。

次のクエリは、date_col の値が過去 30 日以内であるすべてのレコードを選択します。

mysql> テーブルから何かを選択します WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

曜日(日付)

日付の曜日インデックスを返します (1=日曜日、2=月曜日、... 7=土曜日)。これらのインデックス値は ODBC 標準に対応しています。

mysql> DAYOFWEEK('1998-02-03') を選択します。
-> 3

曜日(日付)

日付の曜日インデックスを返します (0=月曜日、1=火曜日、... 6=日曜日)。

mysql> WEEKDAY('1997-10-04 22:23:00') を選択します。
-> 5
mysql> WEEKDAY('1997-11-05') を選択します。
-> 2 

DAYOFMONTH(日付)

日付の月の日を 1 から 31 の範囲で返します。

mysql> DAYOFMONTH('1998-02-03') を選択します。
-> 3

DAYOFYEAR(日付)

日付の年間通算日を 1 から 366 の範囲で返します。

mysql> DAYOFYEAR('1998-02-03') を選択します。
-> 34

月(日付)

1 から 12 までの範囲で日付の月を返します。

mysql> MONTH('1998-02-03') を選択します。
-> 2

DAYNAME(日付)

日付の曜日を返します。

mysql> DAYNAME("1998-02-05") を選択します。
-> '木曜日'

月名(日付)

日付内の月の名前を返します。

mysql> MONTHNAME("1998-02-05") を選択します。
-> '2月'

四半期(日付)

日付の四半期を 1 ~ 4 の範囲で返します。

mysql> QUARTER('98-04-01') を選択します。
-> 2

週(日付)

WEEK(日付,最初)

日曜日が週の最初の曜日である場所では、0 から 52 の範囲で日付の週番号を返す単一の引数があります。2 つの引数形式 WEEK() を使用すると、週が日曜日から始まるか、月曜日から始まるかを指定できます。 2 番目の引数が 0 の場合、週は日曜日に始まり、2 番目の引数が 1 の場合、週は月曜日に始まります。

mysql> WEEK('1998-02-20') を選択します。
-> 7
mysql> WEEK('1998-02-20',0) を選択します。
-> 7
mysql> WEEK('1998-02-20',1) を選択します。
-> 8

年(日付)

1000 から 9999 の範囲で日付の年を返します。

mysql> YEAR('98-02-03') を選択します。
-> 1998

HOUR(時間)

0 から 23 までの範囲の時間を返します。

mysql> HOUR('10:05:03') を選択します。
-> 10

分(時間)

0 から 59 までの範囲の分を返します。

mysql> MINUTE('98-02-03 10:05:03') を選択します。
-> 5

2回目(時間)

0 から 59 までの範囲の秒数を返します。

mysql> SECOND('10:05:03')を選択します。
-> 3

期間追加(P,N)

期間 P に N か月を追加します (形式は YYMM または YYYYMM)。 YYYYMM 形式の値を返します。フェーズ パラメータ P は日付値ではないことに注意してください。

mysql> PERIOD_ADD(9801,2) を選択します。
-> 199803

周期_DIFF(P1,P2)

期間 P1 と P2 の間の月数を返します。P1 と P2 は、YYMM または YYYYMM の形式にする必要があります。期間パラメータ P1 と P2 は日付値ではないことに注意してください。

mysql> PERIOD_DIFF(9802,199703) を選択します。
-> 11

DATE_ADD(日付、INTERVAL 式タイプ)

DATE_SUB(日付,INTERVAL 式タイプ)

ADDDATE(日付,INTERVAL 式タイプ)

SUBDATE(日付,INTERVAL 式タイプ)

これらの関数は日付演算を実行します。 MySQL 3.22 以降では、これらは新しいものになります。 ADDDATE() と SUBDATE() は、DATE_ADD() と DATE_SUB() の同義語です。

MySQL 3.23 では、DATE_ADD() と DATE_SUB() の代わりに + と - を使用できます。 (例を参照してください。) date は開始日を指定する DATETIME または DATE 値、expr は開始日に加算または減算する間隔値を指定する式、expr は文字列です。負の間隔を示すには、"-" で始めることができます。 type は、式をどのように解釈するかを指定するキーワードです。 EXTRACT(type FROM date) 関数は、日付から間隔「type」を返します。次の表は、typeとexprパラメータがどのように関連しているかを示しています。type 値 意味 期待されるexpr 形式

2秒
MINUTE 分MINUTES
時間 時間 時間
日々
月 月
年 年
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"

MySQL では、expr 形式で任意の句読点区切り文字を使用できます。提案された区切り文字が表示されていることを示します。日付引数が DATE 値であり、計算に YEAR、MONTH、DAY 部分のみ (つまり、時刻部分なし) が含まれている場合、結果は DATE 値になります。それ以外の場合、結果は DATETIME 値になります。

mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - 間隔 1 秒;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
間隔1秒);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
間隔1日);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
間隔 "1:1" 分秒);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
間隔 "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
間隔 "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
-> 20102

短すぎる間隔値を指定した場合(type キーワードで想定される間隔部分が含まれていない場合)、MySQL は間隔値の左端の部分を省略したものとみなします。例えば、

DAY_SECOND 型を指定する場合、expr の値には日、時間、分、秒のコンポーネントが含まれることが想定されます。 「1:10」のような値を指定すると、

MySQL では、日と時間の部分が欠落しており、値が分と秒を表していると想定されます。つまり、「1:10」DAY_SECONDは「1:10」と同等です。

MINUTE_SECOND は、MySQL が TIME 値を時刻ではなく経過時間を表すものとして解釈する方法が曖昧です。本当に間違った日付を使用すると、

結果はNULLです。 MONTH、YEAR_MONTH、または YEAR を増分し、結果の日付が新しい月の最大日数よりも大きい場合、日付は新しい月の最大日数を使用するように調整されます。

mysql> select DATE_ADD('1998-01-30', 間隔 1 か月);
-> 1998-02-28

前の例から、INTERVAL という単語と type キーワードは大文字と小文字が区別されないことに注意してください。

TO_DAYS(日付)

日付を指定すると、日数(0 年からの日数)を返します。

mysql> TO_DAYS(950501)を選択します。
-> 728779
mysql> TO_DAYS('1997-10-07') を選択します。
-> 729669

FROM_DAYS(N)

日数 N を指定すると、DATE 値を返します。

mysql> FROM_DAYS(729669)を選択します。
-> '1997-10-07'

DATE_FORMAT(日付,形式)

フォーマット文字列に従って日付値をフォーマットします。フォーマット文字列では、次の修飾子を使用できます: %M 月名 (1 月...12 月)

%W 曜日 (日曜日...土曜日)
%D 英語の接頭辞付きの月の日 (1 日、2 日、3 日など)
%Y 年、数字、4桁
%y 年、数字、2桁
%a 曜日の略称 (Sun...Sat)
%d 月の日付、数字 (00...31)
%e 月の日付、数値 (0...31)
%m 月、数字 (01...12)
%c 月、数字 (1...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 [AP]M)
%T 時間、24 時間 (hh:mm:ss)
%S 秒 (00...59)
%s 秒 (00...59)
%p 午前または午後
%w 曜日 (0=日曜日...6=土曜日)
%U 週 (0...52)、日曜日が週の最初の日です
%u 週 (0...52)、月曜日が週の最初の日です
%% リテラル「%」

その他の文字はすべて解釈されずに結果にコピーされます。

mysql> DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y') を選択します。
-> 「1997年10月土曜日」
mysql> DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s') を選択します。
-> '22:23:00'
mysql> DATE_FORMAT('1997-10-04 22:23:00', を選択
'%D %y %a %d %m %b %j');
-> '4th 97 土 04 10 10月 277'
mysql> 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 3.23 以降では、フォーマット修飾子文字の前に % が必要です。 MySQL の以前のバージョンでは、% はオプションです。

TIME_FORMAT(時刻,形式)

これは上記の DATE_FORMAT() 関数と同様に使用されますが、書式文字列には、時間、分、秒を処理する書式修飾子のみを含めることができます。その他の修飾子は NULL 値または 0 を生成します。

CURDATE()

CURRENT_DATE は、関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、今日の日付値を 'YYYY-MM-DD' または YYYYMMDD 形式で返します。

mysql> CURDATE() を選択します。
-> '1997-12-15'
mysql> CURDATE() + 0 を選択します。
-> 19971215

現在の時間()

現在の時刻

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

mysql> CURTIME() を選択します。
-> '23:50:26'
mysql> CURTIME() + 0 を選択します。
-> 235026

今()

SYSDATE()

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

mysql> NOW() を選択します。
-> '1997-12-15 23:50:26'
mysql> NOW() + 0 を選択します。
-> 19971215235026

UNIX_TIMESTAMP()
UNIX_TIMESTAMP(日付)

引数なしで呼び出された場合は、Unix タイムスタンプ ('1970-01-01 00:00:00' GMT からの秒数) を返します。 UNIX_TIMESTAMP() が日付引数で呼び出されると、'1970-01-01 00:00:00' GMT からの秒数を返します。 date は、DATE 文字列、DATETIME 文字列、TIMESTAMP、または YYMMDD または YYYYMMDD 形式でローカル時間を表す数値になります。

mysql> UNIX_TIMESTAMP() を選択します。
-> 882226357
mysql> UNIX_TIMESTAMP('1997-10-04 22:23:00')を選択します。
-> 875996580

UNIX_TIMESTAMP を TIMESTAMP 列で使用すると、関数は暗黙的な「文字列から UNIX タイムスタンプへの」変換を行わずに値を直接受け入れます。

FROM_UNIXTIME(unix_timestamp)

関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、unix_timestamp 引数によって表される値を 'YYYY-MM-DD HH:MM:SS' または YYYYMMDDHHMMSS 形式で返します。

mysql> FROM_UNIXTIME(875996580) を選択します。
-> '1997-10-04 22:23:00'
mysql> FROM_UNIXTIME(875996580) + 0 を選択します。
-> 19971004222300

FROM_UNIXTIME(unix_timestamp,フォーマット)

フォーマット文字列に従ってフォーマットされた Unix タイムスタンプを表す文字列を返します。形式には、DATE_FORMAT() 関数にリストされているものと同じ修飾子を含めることができます。

mysql> FROM_UNIXTIME(UNIX_TIMESTAMP(), を選択)
'%Y %D %M %h:%i:%s %x');
-> '1997年12月23日 03:43:30 x'

SEC_TO_TIME(秒)

秒引数を時間、分、秒に変換して返します。関数が文字列または数値のコンテキストで使用されているかどうかに応じて、値は 'HH:MM:SS' または HHMMSS としてフォーマットされます。

mysql> SEC_TO_TIME(2378)を選択します。
-> '00:39:38'
mysql> SEC_TO_TIME(2378) + 0 を選択します。
-> 3938

TIME_TO_SEC(時間)

時間パラメータを秒数に変換して返します。

mysql> TIME_TO_SEC('22:23:00') を選択します。
-> 80580
mysql> TIME_TO_SEC('00:39:38') を選択します。
-> 2378

MySQL には多くの日付関数があります。日付の比較に使用する関数は、必ずしも単一の関数であるとは限りません。複数の関数の組み合わせである場合もあります。そのため、想像力を働かせる必要があります。

以下もご興味があるかもしれません:
  • MySQL 時間差関数 (TIMESTAMPDIFF、DATEDIFF)、日付変換計算関数 (date_add、day、date_format、str_to_date)
  • mysql 計算関数の詳細

<<:  Nginx を使用してクロスドメイン Vue 開発環境を処理する方法

>>:  Jsモジュールパッケージのエクスポートの使用法と違いにはインポートが必要

推薦する

IframeとFRAMEの違いの分析

1. Iframe タグの使用<br />Iframe については、「忘れられた隅」に放...

WeChat ミニプログラム 宝くじ番号ジェネレーター

この記事では、WeChatアプレットの宝くじ番号ジェネレータの具体的なコードを参考までに紹介します。...

MySQL を使用して Excel でデータ生成を完了する方法

Excel は、データ分析に最もよく使用されるツールです。この記事では、MySQL と Excel ...

JavaScript で Webpack を使用するチュートリアル

目次0. Webpackとは1. Webpackの使用2. Webpackのコアコンセプト2.1 エ...

クラウド決済を実装するWeChatミニプログラムについて

目次1. はじめに2. 思考分析3. クラウド決済のケーススタディ1. クラウド機能1-1. 認証不...

17の広告効果測定の解釈

1. 広告の 85% は未読です<br />解釈: 成功する広告の 15% にどうやって...

Vue のスロットリング関数使用時の落とし穴ガイド

序文一般的なビジネス シナリオでは、検索ボックスへの入力が完了した後、検索データを取得するために関連...

マークアップ言語 - アンカー

前: マークアップ言語 - フレーズ要素 オリジナルソース 第 7 章 アンカーHTML のリンクの...

nginx 設定ファイルで環境変数を使用する方法

序文Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や li...

keepalived+nginx の高可用性を実装する方法の例

1. keepalived の紹介Keepalived は、もともと LVS クラスタ システム内の...

Reactにおける制御されたコンポーネントと制御されていないコンポーネントの簡単な分析

目次制御されていないコンポーネント制御コンポーネント知らせ結論は制御されていないコンポーネントフォー...

MySQLクエリプランでken_lenの値を計算する方法

key_lenの意味MySQL では、次に示すように、explain を使用して SQL ステートメ...

HTML における水平および垂直の中央揃え方法の詳細な説明 (基礎)

序文馬を書いていたとき、水平方向と垂直方向の中央揃えの方法について、誰もあまり知らなかったと思います...

一般的なMySQLストレージエンジンの長所と短所

目次すべてのストレージエンジンを表示InnoDB ストレージ エンジンMyISAM ストレージエンジ...