我有一个存储季节性地址日期的表:
地址开始日期,地址结束日期
我正在尝试查找其季节性地址在 5 月历史上活跃的人,但我不太确定如何格式化。我似乎无法概念化如何基于两个日期字段构建查询。“活跃”部分是我遇到问题的部分。
在这种情况下,日期的年份都存储为 1000,因为季节性地址切换每年都在同一时间发生。所以我要找的是地址在 DATE '1000-05-01' 和 DATE '1000-05-31' 之间活跃的人 - 我希望这足以描述我的问题
也许:
SELECT *
FROM mytable
WHERE addressStartDate <= ? AND addressEndDate <= ?
您是否正在寻找这样的东西:
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
,我更喜欢根据需要使用 >= 和 < 。
试试这个
SELECT *
FROM yourtable
WHERE addressStartDate >= '1000-05-01'
AND addressEndDate <= '1000-05-30'
如果您想在整个 5 月都保持活跃,那么:
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')))