0

次の詳細を持つデータベース テーブルを使用しています。

Column Number | Column name | Data type
---------------------------------------------
1             | cardid      | int(5)
2             | price       | decimal(5,2)
3             | isbuyprice  | int(1)
4             | date        | date
5             | time        | time

ここで、過去 30 分間にテーブルに挿入されたデータを取得したいと考えています。次のコードを使用してみましたが、テーブルのすべての行が取得されました。

"SELECT * FROM table1 WHERE time > (now() - INTERVAL 30 MINUTE)";
4

5 に答える 5

1
"SELECT * FROM table1 WHERE time > (time(now()) - INTERVAL 30 MINUTE) 
 and date=CURDATE()";

最善の解決策は、db テーブルを変更してから、日付フィールドをタイムスタンプに変更し、時間フィールドを削除できる場合です。その後、上記のクエリが機能します。それ以外の場合は、現在の db 構造で以下のコードを使用してください。

"SELECT * FROM table1 WHERE time > time(time(now())-interval 30 minute) 
 and date=CURDATE()";

うまくいくと思います。ありがとう。

于 2013-02-11T07:35:59.520 に答える
1
SELECT * FROM table1 WHERE time BETWEEN CURTIME() AND  TIME(DATE_SUB(NOW(), INTERVAL 30 MINUTE))

これがあなたを助けることを願っています

于 2013-02-11T08:55:09.573 に答える
1

日付用と時刻用の 2 つの別個のフィールドがあるため、次のようなものを使用できます。

SELECT *
FROM table1
WHERE
  UNIX_TIMESTAMP(date) + TIME_TO_SEC(time) >=
  UNIX_TIMESTAMP(NOW() - INTERVAL 30 MINUTE)

UNIX_TIMESTAMPは 1970 年 1 月 1 日からの秒数に変換dateします。時刻部分の秒数を で加算しtime_to_sec、その結果を で比較しNOW()-INTERVAL 30 MINUTEます。

于 2013-02-11T08:29:19.213 に答える
0

これをチェックして

SELECT * FROM table1 
WHERE date=CURDATE() AND TIME_TO_SEC(time) > TIME_TO_SEC(CURRENT_TIME()) - 1800
于 2013-02-11T07:41:34.290 に答える
0
Select * from table1 where concat (date, ' ', time) > ( now() - interval 30 minute) 
于 2013-02-11T08:42:39.503 に答える