我希望有一个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 end应该是下个月的第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 :(得分: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
。
具有子选择的JOIN的动机是需要仅调用CURDATE()
一次,以避免在两次后续调用之间日期可能发生变化的罕见情况。
请检查比较<
,>=
等是否符合要求。
修改强>
我已将start_date
的计算移到了连接表中。即使以这种方式我必须调用DATE(DATE_FORMAT())
三次,但最好是为每行计算DATE_SUB
,如果我们是在这个月的前半部分。
答案 1 :(得分:0)
你能否根据你的要求使用mysql day()函数。
前:
SELECT day("2016.12.15");
result:
15
同样明智的你可以使用这个功能检查它是否为“15”
选择日(currentDate())
答案 2 :(得分: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;
答案 3 :(得分:-2)
select group_concat(year(now()),"-",month(now()),"-",15)