如何将此Condition转换为SQL语言?

时间:2014-07-02 10:54:43

标签: sql-server sql-server-2012 where

我正在使用SQL SERVER 2012,我的数据库与酒店的客人有关。我需要编写一个查询来提取与在特定月份度过假期的客人相关的数据,比如2014年5月。 将为我过滤数据的2列是DateOfArrival和DateOfDeparture。 我无法弄清楚如何编写WHERE子句,它将为我提供2014年5月的数据。

我试过这个(但后来发现它有缺陷):

WHERE DateOfDeparture BETWEEN '2014-05-01' AND '2014-05-31'

这是有缺陷的,因为我会想念那些出发日期 2014-05-31但是在2014年5月到达的客人(例如:DateOfArrival 2014-05-26和DateOfDeparture) 2014年6月3日)。

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

修改:

WHERE (DateOfDeparture BETWEEN '2014-05-01' AND '2014-05-31') OR (DateOfArrival BETWEEN '2014-05-01' AND '2014-05-31')

答案 1 :(得分:1)

打破这个问题,你需要找到在结束日期之前到达并在开始日期之后离开的人。这使得该子句看起来像这样:

WHERE DateOfArrival <= '2014-05-31' AND DateOfDeparture >= '2014-05-01'

答案 2 :(得分:0)

当你考虑所有可能的情况时,这是非常棘手的,让我们说某人到达'20140429'但离开'20140603'。这是我到目前为止所做的,可能是optimezed,需要一些时间来弄清楚如何:

WHERE '20140501' BETWEEN DateOfArrival AND DateOfDeparture
   OR '20140531' BETWEEN DateOfArrival AND DateOfDeparture
   OR DateOfArrival BETWEEN '20140501' AND '20140531'

还有一件事:我注意到你使用的是非标准日期格式'2014-05-01'。尽量避免使用它,因为您可能会遇到与本地设置相关的问题。 SQL Server中的标准日期格式为YYYYMMDD。

答案 3 :(得分:-1)

试试这个:

WHERE CONVERT(DATETIME,DateOfDeparture,102) BETWEEN '2014-07-01' AND '2014-07-31'