我有以下数据:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<temp-root:xxxxx_update xmlns:temp-root="http://xx.xxxxx.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<firstname>Kevin</firstname>
<Status>false</Status>
<lastname>John</lastname>
<balance>
<tn:balance_InnerSet xmlns:tn="xxxxxxxxxxxxx">
<tn:balancesheet>
<tn:account>
<tn:accounttype>savings</tn:accounttype>
<tn:accountno>123456789</tn:accountno>
</tn:account>
</tn:balancesheet>
</tn:balance_InnerSet>
</balance>
</temp-root:xxxxx_update>
</soapenv:Body>
</soapenv:Envelope>
我的目标是在2016-05-01和2016-05-31之间获取所有日期 以及2016年5月以内的任何记录
因此最终结果:
===============================
PK | StartDate | EndDate
===============================
1 | 2016-05-01 | 2016-05-01
2 | 2016-05-02 | 2016-05-25
3 | 2016-04-01 | 2016-06-01
4 | 2016-02-21 | 2016-06-01
5 | 2016-05-01 | 2016-06-01
===============================
我在考虑以下事项,
===============================
PK | StartDate | EndDate
===============================
1 | 2016-05-01 | 2016-05-01
2 | 2016-05-02 | 2016-05-25
3 | 2016-04-01 | 2016-06-01
5 | 2016-05-01 | 2016-06-01
===============================
但这只是屈服;
SELECT events_sysid, title, startdate, enddate, location, longlat, categoryid
FROM events
WHERE 1=1 AND isactive = 1 AND userid = 2
AND (DATE(startdate) >= DATE('2017-05-01') AND DATE(enddate) <= DATE('2017-05-31'))
我迷失了如何提取“2016年5月以内的任何记录”
缺失:
===============================
PK | StartDate | EndDate
===============================
1 | 2016-05-01 | 2016-05-01
2 | 2016-05-02 | 2016-05-25
===============================
答案 0 :(得分:2)
要查找与May重叠的记录,我们感兴趣的是那些在5月底之前开始并在5月初之后结束的记录:
StartDate <= '2017-05-31' AND EndDate >= '2017-05-01'
换句话说,我们对5月底之后开始的记录和5月初之前结束的记录不感兴趣:
NOT (StartDate > '2017-05-31' OR EndDate < '2017-05-01’)
答案 1 :(得分:0)
答案很简单,您需要提供任何可能的记录,因此您需要检查它是否在月末之前创建并且在5月开始之后结束了
Date(startdate) < "2016-06-01 00:00:00" AND Date(enddate) > "2016-04-30 23:59:59"
答案 2 :(得分:0)
我从
了解到我的目标是获取2016-05-01和2016-05-31之间的所有日期 任何属于2016年5月的记录
总之,你需要在5月份获得日期,无论它们是在5月开始还是结束。
所以试试这个:
SELECT *
FROM `dateTable`
WHERE `StartDate` >= '2016-05-01' OR `EndDate` <= '2016-05-31'