質問
StartDateとEndDate(SQLの日付/時刻形式です)の2つの日付の間にレコードを選択したいと思います。私は次のSQLクエリを持っていますが、それはうまくいきません、誰かが私が間違っていることを教えてくれますか?
"SELECT *
FROM house
WHERE startDate >= '2012/02/22 00:00:00' AND endDate <= '2012-02-25 00:00:00'"
解決
日付を日付に変換し、それらを比較するだけでなく、日付を標準かつ一貫させることをお勧めします。何かのようなもの:
"SELECT *
FROM house
WHERE DATE(startDate) >= DATE('2012-02-22 00:00:00')
AND DATE(endDate) <= DATE('2012-02-25 00:00:00')"
注:あなたのStartDateとEndDateは、提供された文字列と同じ形式であると仮定しました。
他のヒント
すべての行が欲しいですか startDate
は '2012-02-22'
または後で endDate
は '2012-02-22'
または以前?次に、これを使用してください。
SELECT *
FROM house
WHERE startDate >= '2012-02-22'
AND endDate < '2012-02-26' --- notice the `<`, not `<=`
--- and the `day+1`
SQL製品で日付を使用する場合、クエリとステートメントでこの形式をより適切に使用します。 '20120222'
またはこれ(私は読みやすいと思います: '2012-02-22'
.
のようなスラッシュを使用します '2012/02/22'
またはその他の注文 Year-Month-Day
推奨されません。
時間部分を含める必要はありません。 '2012-02-22 00:00:00'
と同じです '2012-02-22'
.
使用 endDate <= '2012-02-25 00:00:00'
2012年2月25日の日付の任意の行ですが、真夜中過ぎです('00:00:00'
)条件と一致しません。これらの行も必要な場合は、使用してください endDate < '2012-02-26'
代わりは。
使用できます DATE(endDate) <= DATE('2012-02-25 00:00:00')
また DATE(endDate) <= '2012-02-25'
しかし、これらの条件は「駐在しない」ため、クエリはインデックスを使用することができません endDate
.
ビルトインがあります STR_TO_DATE
同じ形式のマスクを使用するMySQLの関数 date_format.
start_date >= str_to_date('2012/02/22 00:00:00','%Y/%m/%d %h:%i:%s)