我有一张存储季节性地址日期的表格:
addressStartDate,addressEndDate
我正在努力寻找5月份季节性地址历史悠久的人,但我不太清楚如何格式化它。我似乎无法概念化如何基于两个日期字段构建查询。 “活跃”部分是我遇到问题的部分。
在这种情况下,日期的年份都存储为1000,因为季节性地址切换每年都在同一时间发生。所以我正在寻找的是在DATE'1000-05-01'和DATE'1000-05-31'之间地址有效的人 - 我希望这足以描述我的问题
答案 0 :(得分:1)
也许:
SELECT *
FROM mytable
WHERE addressStartDate <= ? AND addressEndDate <= ?
答案 1 :(得分:1)
你在寻找这样的东西:
SELECT addressStartDate, addressEndDate, otherfields
FROM yourTable
WHERE addressStartDate >= '1000-05-01'
AND addressEndDate < '1000-06-01'
或者根据您的问题的解释,如果月份中只需要存在地址日期,可能是这样的:
SELECT addressStartDate, addressEndDate, otherfields
FROM yourTable
WHERE addressStartDate < '1000-06-01'
AND addressEndDate >= '1000-05-01'
根据您存储数据的方式(有或没有时间),而不是使用BETWEEN
,我更喜欢使用&gt; =和&lt;如所须。
答案 2 :(得分:1)
试试这个
SELECT *
FROM yourtable
WHERE addressStartDate >= '1000-05-01'
AND addressEndDate <= '1000-05-30'
答案 3 :(得分:1)
如果你想在整个五月活跃,那么:
select *
from t
where t.StartDate <= date('1000-05-01') and t.StopDate >= date('1000-05-31')
如果你想在5月的任何日子活动:
select *
from t
where t.StartDate <= date('1000-05-31') and t.StopDate >= date('1000-05-01')
StopDate
限制可能会被拒绝,具体取决于停止日期的日期是否被视为有效日期。
由于您的数据结构存在问题,因此您的数据是否在日历年之前也可能会变得复杂。 StartDate
可能大于StopDate
,这意味着一年换行。要处理年份包装,请尝试以下方法:
select *
from t
where (t.StartDate < t.StopDate and t.StartDate <= date('1000-05-01') and t.StopDate >= date('1000-05-31')) or
(t.StartDate > t.StopDate and ( t.StartDate <= date('1000-05-01') or t.StopDate >= date('1000-05-31')))