2011-09-30 68 views
12

Tôi đang cố tạo truy vấn mang lại kết quả dựa trên dấu thời gian, cho biết khoảng thời gian là 30 phút.dấu thời gian mySQL SELECT (now() - 3000);

Vì vậy, những gì tôi đã tìm ra là tôi có thể

SELECT * FROM x WHERE ts BETWEEN timestamp(now()-3000) AND timestamp(now()) 

Vì vậy, đây sẽ truy vấn tất cả mọi thứ từ x với timestamps trong ts cột trong vòng 30 phút cuối.

Tuy nhiên, điều này chỉ hoạt động sau bây giờ() vượt quá năm yyyy-mm-dd HH: 30: 00 vì bất kỳ lúc nào trước khi kết quả là NULL ... điều này khá cồng kềnh và tôi không hiểu tại sao sẽ không chỉ trừ đi số phút friggin từ giờ!

Hãy giúp tôi! Tôi không thể tìm thấy bất kỳ phương pháp nào khác để thực hiện truy vấn trong vòng 30 phút qua, đó là những gì tôi đang cố gắng đạt được.

Trân trọng,

John

Trả lời

34
SELECT * FROM x WHERE ts BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) AND timestamp(NOW()) 
1

Trước hết bạn cần phải nhận ra rằng dấu thời gian() trả về một dấu thời gian unix trong vài giây. 3000 giây không phải là 30 phút, nó sẽ là 1800 giây. hãy thử rằng

+0

Thực ra khi tôi trừ 1800 nó chỉ trừ 18 giây vì vậy ... – Theveloper

+0

@ Nhà phát triển ah nó phải là unix_timestamp, không thấy phần đó. Dấu thời gian ở định dạng khác mà bạn không thể thực hiện toán học chặt chẽ. – mugetsu

11
SELECT * FROM x WHERE ts BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW(); 
2
SELECT * FROM x 
WHERE ts BETWEEN TIMESTAMPADD(MINUTE, -30, NOW()) AND NOW(); 
0
SELECT * FROM (`yourdb`) WHERE `timestamp` BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW(); 
1

Đối với tôi, những gì làm việc đang theo truy vấn

select * from x where (now() - ts) < 180000 

180000 là 30 phút, bởi vì 6000 ms là 1 phút

Các vấn đề liên quan