質問

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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top