【问题标题】:How to add and substract 15 minutes from date sql如何从日期sql中加减15分钟
【发布时间】:2017-11-08 13:04:54
【问题描述】:

我有一个查询要根据纬度经度和日期搜索记录。

查询在同一日期工作正常,但我想获取日期前 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%' 

我想获取 pt_date 在 15 分钟之前和 15 分钟之后的记录。

【问题讨论】:

  • 1.如果您遇到错误,请在您的问题中逐字引用它们。 2. 这里缺少比较运算符WHERE pt_date DATEADD(...)

标签: mysql date dateadd


【解决方案1】:

试试这个:

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

【讨论】:

  • $params = array("$st_lati%", "$st_longi%", "$ed_lati%", "$ed_longi%", $pt_date);我收到绑定参数错误,参数数量不匹配。 @ReneS
  • 是的,您需要传递 pt_date 两次,因为它现在在查询中使用了两次
  • 如果时间是 6:30,我没有得到 6:18,6:15,6:55 的记录不能正常工作
【解决方案2】:

我使用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;

【讨论】:

    【解决方案3】:

    您可以使用分钟差。查询将是这样的:

    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;
    

    【讨论】:

    • 我也需要日期后 15 分钟的记录。
    • 在这种情况下,您可以使用 ABS() 函数。
    • 如果时间是 6:30,我没有得到 6:18,6:15,6:55 的记录不能正常工作
    • 这种方法的缺点是不能使用pt_date上的索引
    猜你喜欢
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2011-08-12
    • 2019-04-12
    相关资源
    最近更新 更多