首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当前日期的MySql查询

当前日期的MySql查询
EN

Stack Overflow用户
提问于 2016-08-04 01:09:05
回答 5查看 132关注 0票数 0

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

代码语言:javascript
复制
FROM lbs_trace_etrack WHERE (lbs_agent = '$slfirstname' AND DATE (lbs_date) = CURDATE()) ORDER BY lbs_date DESC LIMIT 0,50");

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

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

代码语言:javascript
复制
FROM lbs_trace_etrack WHERE (lbs_agent = '$slfirstname' AND MONTH(lbs_date) =  (MONTH(NOW()) AND YEAR(lbs_date) = YEAR(NOW())

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

EN

回答 5

Stack Overflow用户

发布于 2016-08-04 01:21:32

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

代码语言:javascript
复制
WHERE lbs_agent >= DATE_FORMAT(NOW() ,'%Y-%m-01')

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

您可以随意使用MySQL函数作为比较值,因为在计划查询时,这些值只会计算一次。然后,您可以在字段上使用索引来快速过滤表中符合条件的行。从查询执行角度来看,这基本上等同于您的查询包含以下WHERE子句:

代码语言:javascript
复制
WHERE lbs_agent >= '2016-08-01'

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

代码语言:javascript
复制
WHERE DATE(lbs_date) = '2016-08-03'

代码语言:javascript
复制
WHERE MONTH(lbs_date) = 8 AND YEAR(lbs_date) = 2016

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

票数 0
EN

Stack Overflow用户

发布于 2016-08-04 01:32:56

或者像这样使用PHP变量:

代码语言:javascript
复制
<?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."')";
?>
票数 0
EN

Stack Overflow用户

发布于 2016-08-04 01:34:09

我已经做了以下工作,并且它是有效的

代码语言:javascript
复制
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的指导

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38749794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档