我希望有一个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 DESClbs_date开始应该是每个月的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到现在的用法。
发布于 2016-12-31 09:56:29
如果你真的想要我理解你想要的东西,
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要好,在这个情况下,我们是在本月的前半部分。
发布于 2016-12-31 09:18:53
您能使用mysql day()函数满足您的需求吗?
例如:
SELECT day("2016.12.15");
result:
15像wise一样,您可以使用这个函数来检查它的"15“
选择日期(currentDate())
发布于 2016-12-31 09:35:02
使用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;https://stackoverflow.com/questions/41406857
复制相似问题