0

我有一个存储季节性地址日期的表:

地址开始日期,地址结束日期

我正在尝试查找其季节性地址在 5 月历史上活跃的人,但我不太确定如何格式化。我似乎无法概念化如何基于两个日期字段构建查询。“活跃”部分是我遇到问题的部分。

在这种情况下,日期的年份都存储为 1000,因为季节性地址切换每年都在同一时间发生。所以我要找的是地址在 DATE '1000-05-01' 和 DATE '1000-05-31' 之间活跃的人 - 我希望这足以描述我的问题

4

4 回答 4

1

也许:

SELECT *
FROM mytable
WHERE addressStartDate <= ? AND addressEndDate <= ?
于 2013-06-03T19:48:20.937 回答
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,我更喜欢根据需要使用 >= 和 < 。

于 2013-06-03T19:48:42.220 回答
1

试试这个

SELECT *
FROM yourtable
WHERE addressStartDate >= '1000-05-01' 
AND addressEndDate <= '1000-05-30'
于 2013-06-03T19:49:43.540 回答
1

如果您想在整个 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')))
于 2013-06-03T19:50:29.257 回答