ホームページ >データベース >mysql チュートリアル >mysqlは時間を比較できますか?
時間の比較は、[ のようなステートメントを使用して mysql に実装できます。 SELECT テスト日付 FROM t1 WHERE テスト日付 >= '2018-09-12';SELECT テスト日付 FROM t1 WHERE テスト日付 >= 20180912;]。
最近、日付の比較に間違った方法をよく使用していることがわかりました。たとえば、次のステートメントでは、a フィールドは DATETIME の列です。 type:
select a from t1 where DATEDIFF(a, '2018-09-11') < 0;
このステートメントは、2018-09-11 の日付より前のすべてのレコードを検索することになっていますが、このステートメントには問題があります。フィールドにインデックスが付けられている場合、日付の比較にこの型を使用すると、次のような問題が発生します。クエリでインデックスを使用しないようにすると、クエリのパフォーマンスが低下します。
推奨コース: 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 9bd15d8b09ea17864a985b687130a3ac、>=、377ffdeac10f5c2b2a72b4b0838597af= '2018-09-12'; SELECT testdate FROM t1 WHERE testdate >= 20180912; SELECT MOD(testdate,100) FROM t1 WHERE testdate >= 20180912; SELECT testdate FROM t1 WHERE testdate >= '20180912';
Mysql では、仮想日付とも呼ばれる DATE 型の値「0」として「0000-00-00」を格納できます。シナリオによっては、NULL 値を保存するよりも便利です。不正な日付値が DATE 型フィールドに保存された場合、MySQL はデフォルトでそれを「0000-00-00」として保存します。 「0」値の保存が許可されない場合は、NO_ZERO_DATE パラメーターを有効にします。
unix_timestamp 関数を使用して、文字時間を Unix タイムスタンプに変換することもできます。
rree以上がmysqlは時間を比較できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。