0

主な問題は、日付(必要なもの)ではなく、データベースdatetimeに保存したことです。分かった、気にしないで。

私は毎日何千ものレポートを保存しています。

datetime_view (時間を短縮するため) を 10 ずつ LEFT する必要があり、すべて問題ありません。これを除いて。なぜ条件 + 未来から 1 日を入れなければならないのかを理解しようとしています。そうしないと、必要なものが検索されません。

SELECT 
    LEFT(datetime_view,10),
    count(type) 
        FROM reports 
            WHERE 
        type IN (1,2,5) 
            AND 
        datetime_view>='2012-10-28' 
            AND
        datetime_view<='2012-11-04' 
            group by LEFT(datetime_view,10);

未来から検索しなければならないことがわかります。どうして??

28.10から3.11までの出力が得られます....

4

2 に答える 2

1

日付/時刻の値に文字列演算を使用しないでください。MySQLには、日付/時刻を操作するための膨大な関数セットがあります。試す

GROUP BY DATE(datetime_view)

代わりに、datetimeフィールドの日付部分のみを抽出します。文字列操作はy10kに準拠していません。date()関数の使用はです。

については、比較がどのように行われるかを検討してくださいplus one day。日付/時刻の比較で使用される場合、プレーンな日付値には暗黙の00:00:00時刻値が付加されます。たとえば、すべての日付の時刻は「真夜中」です。

于 2012-11-03T15:33:10.017 に答える
1

where条件でも、のDATE(datetime_view)代わりに時間を短縮するために使用する方が良いと思います。LEFT(datetime_view,10)

DATE(datetime_view) <= '2012-11-03'
于 2012-11-03T15:33:28.363 に答える