我有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
答案 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())