Php SQL查询,用于在每月的两天之间进行选择

Php SQL查询,用于在每月的两天之间进行选择,php,mysql,sql,Php,Mysql,Sql,我想要一个SQL查询,在两个月的日期之间进行选择 比如说在下个月的15号到15号之间 这是为了会计目的 我知道每个月都有不同的日期,在开始日期后再加上30天或31天是不起作用的,尤其是在2月。我的会计运行时间是从本月15日到下个月15日 我当前对所选日期的查询如下 SELECT * FROM lbs_trace_etrack WHERE lbs_date >= '" . $dates . "' AND lbs_date <= '" . $datee . "' AND lbs_

我想要一个SQL查询,在两个月的日期之间进行选择

比如说在下个月的15号到15号之间

这是为了会计目的

我知道每个月都有不同的日期,在开始日期后再加上30天或31天是不起作用的,尤其是在2月。我的会计运行时间是从本月15日到下个月15日

我当前对所选日期的查询如下

SELECT * FROM lbs_trace_etrack WHERE lbs_date  >=  '" . $dates . "' 
AND lbs_date  <= '" . $datee . "' AND lbs_client='$slcustom1' ORDER BY lbs_date DESC, lbs_time DESC
以及查询

SELECT * FROM lbs_trace_etrack WHERE lbs_date  >=  '" .    
$first . "' 
AND lbs_date  <= '" . $last . "' ORDER BY lbs_date DESC

基本上,当我们通过本月15日时,我需要它来显示从当前15日(而不是前一个月15日)到现在的当前使用情况。您是否能够根据您的要求使用mysql day功能

例:

像wise一样,您可以使用此函数检查其是否为15

选择daycurrentDate

使用DAY函数获取特定日期

select * from My_Table where  day(str_to_date(`Date`,'%d-%m-%Y'))  = 1 or day(str_to_date(`Date`,'%d-%m-%Y'))  = 15;

如果你真的想要我理解你想要的

   SELECT l.* 
     FROM lbs_trace_etrack l
     JOIN (SELECT s.cd, CASE 
             WHEN s.cd >= DATE(DATE_FORMAT(s.cd,'%Y-%m-15')) 
             THEN DATE(DATE_FORMAT(s.cd,'%Y-%m-15'))
             ELSE DATE_SUB(DATE(DATE_FORMAT(s.cd,'%Y-%m-15')), INTERVAL 1 MONTH) 
               AS start_date
             FROM (SELECT CURDATE() cd) s) d
       ON (TRUE)
    WHERE l.lbs_date  >= d.start_date
      AND l.lbs_date  < d.cd  
      AND l.lbs_client = '$slcustom1' 
 ORDER BY l.lbs_date DESC, l.lbs_time DESC;
请注意,这里仍然有PHP变量$slcustom1。 使用subselect连接的动机是只需要调用CURDATE一次,以避免在两次后续调用之间日期可能发生更改的罕见情况。 请检查Comparison=等是否符合您的要求

编辑:
我已将开始日期的计算移到联接表中。即使以这种方式我必须调用DATEDATE\u FORMAT三次,也比在上半月为每行计算DATE\u SUB要好。

当前查询有什么问题?当前查询使用表单中预定义的日期,我想使用静态日期,这样我就不必使用预定义的变量。这不是很清楚。如果要动态选择日期,可以将其写入select date_FORMATNOW+间隔1个月,“%Y-%m-15”;这是解决他的问题的唯一办法吗?
select * from My_Table where  day(str_to_date(`Date`,'%d-%m-%Y'))  = 1 or day(str_to_date(`Date`,'%d-%m-%Y'))  = 15;
select group_concat(year(now()),"-",month(now()),"-",15)
   SELECT l.* 
     FROM lbs_trace_etrack l
     JOIN (SELECT s.cd, CASE 
             WHEN s.cd >= DATE(DATE_FORMAT(s.cd,'%Y-%m-15')) 
             THEN DATE(DATE_FORMAT(s.cd,'%Y-%m-15'))
             ELSE DATE_SUB(DATE(DATE_FORMAT(s.cd,'%Y-%m-15')), INTERVAL 1 MONTH) 
               AS start_date
             FROM (SELECT CURDATE() cd) s) d
       ON (TRUE)
    WHERE l.lbs_date  >= d.start_date
      AND l.lbs_date  < d.cd  
      AND l.lbs_client = '$slcustom1' 
 ORDER BY l.lbs_date DESC, l.lbs_time DESC;