ホームページ > データベース > mysql チュートリアル > mysqlは時間を比較できますか?

mysqlは時間を比較できますか?

(*-*)浩
リリース: 2020-09-15 13:38:23
オリジナル
14482 人が閲覧しました

時間の比較は、[ のようなステートメントを使用して mysql に実装できます。 SELECT テスト日付 FROM t1 WHERE テスト日付 >= '2018-09-12';SELECT テスト日付 FROM t1 WHERE テスト日付 >= 20180912;]。

mysqlは時間を比較できますか?

最近、日付の比較に間違った方法をよく使用していることがわかりました。たとえば、次のステートメントでは、a フィールドは DATETIME の列です。 type:

select a from t1 where DATEDIFF(a, &#39;2018-09-11&#39;) < 0;
ログイン後にコピー

このステートメントは、2018-09-11 の日付より前のすべてのレコードを検索することになっていますが、このステートメントには問題があります。フィールドにインデックスが付けられている場合、日付の比較にこの型を使用すると、次のような問題が発生します。クエリでインデックスを使用しないようにすると、クエリのパフォーマンスが低下します。

推奨コース: MySQL チュートリアル

mysqlは時間を比較できますか?

日付フィールドの比較に関する Mysql のドキュメントを読みました。日付比較を実行すると、mysql は日付を比較用の数値に自動的に変換します。 where 条件の後、文字列形式の日付を使用して DATE、DATETIME、TIMESTAMP、および TIME タイプのフィールドと比較する場合、文字列形式の要件は厳密ではありません。「2018-09-」など、任意の形式の区切り文字を使用して日付を表すことができます。 11"、"2018#09#11"、"2018&09&11" は、mysql ではすべて同じ日付です。 「20180911」のように区切り文字がない場合は、「2018-09-11」または区切り文字のある他の日付と同じになります。たとえば、以下の図では

select a from t1 where a < &#39;2018#09#11&#39;;
与
select a from t1 where a < &#39;2018-09-11&#39;;
与
select a from t1 where a < &#39;20180911&#39;;
所代表的意义是相同的,都是查询日期小于2018年9月11日的数据
也就是说上图的查询语句,完全可以重写为,这么做的好处?就是会使用索引,是查询更快
select a from t1 where a < &#39;2018-09-11&#39;;
ログイン後にコピー

日付型フィールドと文字列型日付を <、>、>=、<= によって比較すると、Mysql は文字列型日付を次のように変換します。整数型の数値はクエリを高速化するために比較されます。

次の 3 つの状況を除く:

1、2 つのテーブル フィールドの比較、

2、日付型フィールドと式の比較、

3 、式を使用して日付型フィールドを比較します;

理由: 上記 3 つの状況の場合、mysql は比較のために日付を文字列に変換します。

次の例はすべて正常に実行できます:

INSERT INTO t1 (testdate) VALUES (20180912);
INSERT INTO t1 (testdate) VALUES (&#39;20180912&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;18-09-12&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;2018.09.12&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;2018 09 12&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;0000-00-00&#39;);

SELECT testdate FROM t1 WHERE testdate >= &#39;2018-09-12&#39;;
SELECT testdate FROM t1 WHERE testdate >= 20180912;
SELECT MOD(testdate,100) FROM t1 WHERE testdate >= 20180912;
SELECT testdate FROM t1 WHERE testdate >= &#39;20180912&#39;;
ログイン後にコピー

Mysql では、仮想日付とも呼ばれる DATE 型の値「0」として「0000-00-00」を格納できます。シナリオによっては、NULL 値を保存するよりも便利です。不正な日付値が DATE 型フィールドに保存された場合、MySQL はデフォルトでそれを「0000-00-00」として保存します。 「0」値の保存が許可されない場合は、NO_ZERO_DATE パラメーターを有効にします。

unix_timestamp 関数を使用して、文字時間を Unix タイムスタンプに変換することもできます。

rree

以上がmysqlは時間を比較できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート