繁体   English   中英

SQL Query在一个月的两天之间选择

[英]SQL Query to select Between two days of the month

我希望有一个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

lbs_date start应该是每个月的15号,lbs_date结束应该是下个月的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日到现在

如果你真的想要我理解你想要的东西,

   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 具有子选择的JOIN的动机是需要仅调用CURDATE()一次,以避免在两次后续调用之间日期可能发生变化的罕见情况。 请检查比较<>=等是否符合您的要求。

编辑:我已将start_date的计算移动到连接表。 即使以这种方式我必须调用DATE(DATE_FORMAT())三次,但是对于每一行计算DATE_SUB比在这个月的前半部分更好。

你能否根据你的要求使用mysql day()函数。

例如:

SELECT day("2016.12.15");
       result:
       15

同样明智的你可以使用这个功能检查它的“15”

选择日(currentDate())

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM