0

だから基本的に私はテーブルを持っています-

ID | from | To

-----------------
1  | 25.05.2012|30.05.2012
-----------------
2  | 15.05.2012|20.05.2012
-----------------
3  | 25.06.2012|30.06.2012

と私は質問があります

SELECT date.*
FROM table AS date
WHERE (date.from >= '25.05.2012' OR date.to >= '25.06.2012' )  AND (date.to <= '30.05.2012' OR date.from <= '25.05.2012' )
GROUP by date.id

しかし、それは機能していません、何が問題である可能性がありますか?

4

5 に答える 5

1

日付の比較ではなく、文字列の比較を実行しています。たとえば、比較は文字列の2番目の文字までしか到達せず、それが。26.05より大きい25.06と判断されるため、6より大きいです5

日付の比較を実行するには、値を日付(推奨)として、または適切な文字列形式で保存する必要がありますyyyyMMdd

于 2012-06-21T11:51:31.040 に答える
1

dateMySQLで予約されているキーワードです。テーブルを別の名前で呼び出してみてください。

于 2012-06-21T11:53:30.840 に答える
0
SELECT * FROM table WHERE (from >= '25.05.2012' AND to <= '25.05.2012') GROUP by id;
于 2012-06-21T11:53:41.977 に答える
0

「date」は MySQL の予約文字列です。その名前を持つすべてのテーブルと列の名前をカスタムのものに変更することをお勧めします。これにより、すでに問題が解決している可能性があります。

于 2012-06-21T11:55:43.143 に答える
0

ポイント 1 : table、date、from は予約済みのキーワードです。これらは、テーブルの命名には使用しないでください。テーブル名が table の場合は、バッククォートを使用します

ポイント2:テーブルが1つあるのに、なぜそのエイリアスを作成するのですか?

ポイント 3:日付を比較するときは、yyyy-mm-dd. 私は信じてfromおり、to列はタイムスタンプです。

ポイント4:などの集計関数を使用していないため、現時点ではGROUP BYステートメントは必要ありませんSUM, COUNT, etc

あなたのクエリは

SELECT *
FROM `table`
WHERE 
    (`from`>= '2012-05-25' OR `to`>= '2012-06-25' ) 
    AND
    (`to` <= '2012-05-30' OR `from` <= '2012-05-25');

日付を として渡したい場合は、 STR_TO_DATE関数を使用して文字列を日付に変換します25.05.2012

于 2012-06-21T12:12:43.993 に答える