MySql查询当前日期

时间:2016-08-03 17:09:05

标签: php mysql

我有MySQL查询,我想从我的数据库中提取数据,但是基于当前月份信息

FROM lbs_trace_etrack WHERE (lbs_agent = '$slfirstname' AND DATE (lbs_date) = CURDATE()) ORDER BY lbs_date DESC LIMIT 0,50");

此字符串会提取当天的信息。

我也尝试了以下字符串,但没有得到任何结果:

FROM lbs_trace_etrack WHERE (lbs_agent = '$slfirstname' AND MONTH(lbs_date) =  (MONTH(NOW()) AND YEAR(lbs_date) = YEAR(NOW())

我的表格日期格式如下2016-08-02

5 个答案:

答案 0 :(得分:0)

假设lbs_agent是注释中提到的DATE字段类型,您可以这样做(注意我只显示WHERE子句的相关日期部分):

WHERE lbs_agent >= DATE_FORMAT(NOW() ,'%Y-%m-01')

重要的是,不要在WHERE比较的左侧(字段定义)侧使用函数调用,因为您将无法利用该字段上的任何索引。执行此操作需要使用MySQL进行全表扫描,对表中的每一行执行此字段的功能,以便进行比较。

可以随意使用MySQL函数作为比较值,因为在计划查询时只会计算一次。然后,您可以使用该字段上的索引快速筛选符合条件的表中的行。从查询执行的角度来看,这基本上与您的查询具有此WHERE子句相同:

WHERE lbs_agent >= '2016-08-01'

与您的问题中的示例相比,这些示例将执行为:

WHERE DATE(lbs_date) = '2016-08-03'

WHERE MONTH(lbs_date) = 8 AND YEAR(lbs_date) = 2016

这两个都需要全表扫描,因为在扫描行之前无法确定从字段派生的值。

答案 1 :(得分:0)

或者使用PHP变量:

<?php
$start = date('Y-m-01'); // FIRST DAY OF CURRENT MONTH
$end = date("Y-m-t", strtotime(date("Y-m-d"))); // LAST DAY OF CURRENT MONTH
$sql = "SELECT * FROM lbs_trace_etrack WHERE lbs_agent = '".$slfirstname."' AND (lbs_date BETWEEN '".$start."' AND '".$end."')";
?>

答案 2 :(得分:0)

我已完成以下工作

FROM lbs_trace_etrack WHERE lbs_agent = '$slfirstname' AND MONTH(lbs_date) = MONTH(CURDATE()) AND YEAR(lbs_date) = YEAR(CURDATE()) ORDER BY lbs_date ASC, lbs_time ASC 

感谢所有人和Tijo的指导

答案 3 :(得分:-1)

您可以尝试提取月份,例如EXTRACT(MONTH from NOW())

答案 4 :(得分:-1)

如果是时间戳,您可以使用以下代码 个月(CURDATE())