2016-12-31 38 views
3

我想要一个SQL查询来选择两个月的日期。SQL查询选择每月的两天之间

可以说在下个月的15日和15日之间。

这是会计目的

我知道有具有不同天增加30天或31天内开始日期每个月不会在二月尤其是工作,我的记账运行是从本月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 

lbs_date开始应该是每个月和lbs_date结束的15日应该是下个月

15日通过定义的日期如下作品,但它是从11月的日期到现在给我的,我希望从本月15日开始看到我们已经过去了本月的第15天

$first = date('Y-m-15', strtotime("$last -1 month")); 
$last = date('Y-m-t'); 

和查询

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

基本上是以我们通过本月15日,我需要它来显示我从目前的15日不前一个月15日到现在

+0

当前查询有什么问题? – jophab

+0

当前查询使用表单中的预定义日期,我想使用静态日期,因此我不必使用预定义的变量 –

+0

这不是很清楚。如果你想动态选择日期,你可以把它写成SELECT DATE_FORMAT((NOW()+ INTERVAL 1 MONTH),'%Y-%m-15'); – user3606329

回答

2

如果你真的想要什么,我知道你想,

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那里。 加入子选择的动机是需要仅调用CURDATE()一次,以避免在两次后续调用之间日期可能发生变化的罕见情况。 请检查比较<,>=等是你想要的。

编辑: 我已经将start_date的计算移动到了连接表中。即使以这种方式,我必须拨打DATE(DATE_FORMAT())三次,如果我们处于该月的上半月,那么最好为每一行计算DATE_SUB

0

难道你能使用mysql目前每天使用()函数满足您的要求。

例:

SELECT day("2016.12.15"); 
     result: 
     15 

喜欢聪明人,你可以使用此功能来检查其是否 “15”

选择一天(的currentdate())

+0

是他的问题的唯一解决方案? –

0

使用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; 
-2
select group_concat(year(now()),"-",month(now()),"-",15)