0

DATETIME「created_at」という名前のフィールドを持つテーブルがあります。次のような 2 つのクエリを実行してみます。

  1. SELECT * FROM myTable WHERE created_at BETWEEN '2015-03-15 10:25:00' AND '2015-03-25 10:30:00';
  2. SELECT * FROM myTable WHERE created_at BETWEEN STR_TO_DATE('2015-03-15 10:25:00', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('2015-03-25 10:30:00', '%Y-%m-%d %H:%i:%s');

私は常に最初のクエリを使用していましたが、最近、2 番目のアプローチが比較する最良の方法であると説明している記事に出くわしましたDATETIME。残念ながら、そのアプローチが最善の方法である理由についての説明は含まれていません。

さて、いくつか質問があります:

  • これら2つのアプローチに違いはありますか?
  • どちらの方法がより好ましいですか?

ありがとう!

4

1 に答える 1

2

私は定数を直接入れることを好みます。str_to_date()引数は定数であるため、MySQL はクエリに対して関数を 1 回だけ処理すると思います。ただし、この最適化に依存するのは好きではありません。

の利点str_to_date()は、国際化設定に依存しない必要があるため、結果が明確になることです。ただし、ISO 標準形式の使用は同等である必要があり、それが定数の構造です。

ただし、それはさておき、クエリを記述するより良い方法は次のとおりです。

SELECT *
FROM myTabl
WHERE created_at >= '2015-03-15 10:25:00' AND
      created_at < '2015-03-25 10:30:00'

間隔を 10 日 5 分 1 秒にするのではなく、正確に 10 日 5 分にする必要があると思います。いずれにしても、betweendates および datetimes を使用すると、特に次の場合に予期しない結果が生じる可能性があります。

where datetime between '2015-03-15' and '2015-03-16'

2 つの日付を取得していると思う場合は、間違っています。最初の日にすべての日付時刻を取得し、2 番目に午前 0 時を取得しています。

于 2015-03-29T15:55:36.813 に答える