2017-06-07 88 views
-3

我有一個查詢根據緯度經度和日期搜索記錄。如何添加和減去從日期的15分鐘sql

該查詢可以在同一日期正常工作,但我希望獲得日期前15分鐘和日期後15分鐘內的記錄。

工作的查詢是這樣的:

SELECT 
    * 
FROM post 
WHERE st_lati LIKE '19.878454%' AND st_longi LIKE '73.836708%' 
AND ed_lati LIKE '20.012709%' AND ed_longi LIKE '73.791389%' 
AND pt_date LIKE '2017-05-30 06:30%' 

我試圖使用DATEADD函數零下15分鐘,但它給人的錯誤。

我嘗試

SELECT 
* 
FROM post 
WHERE pt_date DATEADD(minute, -15 * @h - @m, pt_date) 
AND st_lati LIKE '19.878454%' 
AND st_longi LIKE '73.836708%' 
AND ed_lati LIKE '20.012709%' 
AND ed_longi LIKE '73.791389%' 

我想記錄,其中前15分鐘和15分鐘後pt_date。

+1

1.如果您遇到錯誤,那麼您在您的問題中逐字引用它們。 2.您在這裏缺少比較運算符,WHERE pt_date DATEADD(...)' – CBroe

回答

0

試試這個:

SELECT 
* 
FROM post 
WHERE st_lati LIKE '19.878454%' 
    AND st_longi LIKE '73.836708%' 
    AND ed_lati LIKE '20.012709%' 
    AND ed_longi LIKE '73.791389%' 
    AND pt_date BETWEEN '2017-05-30 06:30:00' - INTERVAL 15 MINUTE AND 
    '2017-05-30 06:30:00' + INTERVAL 15 MINUTE 
+0

$ params = array(「$ st_lati%」,「$ st_longi%」,「$ ed_lati%」,「$ ed_longi%」, $ pt_date);我正在爲此綁定參數錯誤,參數個數不匹配。 @ReneS – Sid

+0

是的,您需要兩次傳遞'pt_date'兩次,因爲它在查詢 – ReneS

+0

中現在使用了兩次,但仍然出現錯誤。 – Sid

0

我使用UNIX_TIMESTAMP()功能這樣的事情,在這裏你有ISO格式,或接近它的日期。這使您可以在幾秒鐘內工作(所以15分鐘是60 * 15):

where條款的相關部分應該是:

AND UNIX_TIMESTAMP(pt_date) BETWEEN UNIX_TIMESTAMP('2017-05-30 06:30')-60*15 AND UNIX_TIMESTAMP('2017-05-30 06:30')+60*15;

+0

糟糕,是的,更正了 –

0

您可以在幾分鐘內使用差異。查詢將是這樣的:

SELECT 
* 
FROM post 
WHERE st_lati LIKE '19.878454%' 
    AND st_longi LIKE '73.836708%' 
    AND ed_lati LIKE '20.012709%' 
    AND ed_longi LIKE '73.791389%' 
    AND ABS(TIMESTAMPDIFF(MINUTE, pt_date, '2017-05-30 06:30')) <= 15; 
+0

我需要在日期過後15分鐘記錄。 – Sid

+0

在這種情況下,您可以使用ABS()函數。 – elyor

+0

如果時間是6:30我沒有收到6:18,6:15,6:55記錄不正常 – Sid