Sql server 如何将此条件转换为SQL语言?

Sql server 如何将此条件转换为SQL语言?,sql-server,sql-server-2012,where,Sql Server,Sql Server 2012,Where,我使用的是SQL SERVER 2012,我的数据库与酒店的客人相关。我需要编写一个查询,提取特定月份(比如2014年5月)度假客人的相关数据。 为我筛选数据的两列是到达日期和离开日期。 我就是不知道如何写WHERE子句来提供2014年5月的数据 我试过这个(但后来发现它有缺陷): 这是有缺陷的,因为我会想念那些出发日期在2014年5月31日之后但在2014年5月内到达的客人(例如:2014年5月26日到达日期和2014年6月03日离开日期) 谢谢你的帮助。请修改: WHERE (DateOfD

我使用的是SQL SERVER 2012,我的数据库与酒店的客人相关。我需要编写一个查询,提取特定月份(比如2014年5月)度假客人的相关数据。 为我筛选数据的两列是到达日期和离开日期。 我就是不知道如何写WHERE子句来提供2014年5月的数据

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

这是有缺陷的,因为我会想念那些出发日期在2014年5月31日之后但在2014年5月内到达的客人(例如:2014年5月26日到达日期和2014年6月03日离开日期)

谢谢你的帮助。

请修改:

WHERE (DateOfDeparture BETWEEN '2014-05-01' AND '2014-05-31') OR (DateOfArrival BETWEEN '2014-05-01' AND '2014-05-31')
试试这个:

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

分解问题,你需要找到在结束日期之前到达,在开始日期之后离开的人。这使该条款看起来像这样:

WHERE DateOfArrival <= '2014-05-31' AND DateOfDeparture >= '2014-05-01'
其中到达日期='2014-05-01'

当你考虑所有可能的情况时,这是相当棘手的,假设有人到达了
'20140429'
,但离开了
'20140603'
。以下是我迄今为止得到的,可能可以优化,需要一些时间来找出如何:

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

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

这并不能回答问题。看起来相当复杂。另外,使用YYYY-MM-DD不会引起任何本地化问题,这与YYYYMMDDY完全相同。您是正确的,我使它变得比必要的更复杂,您的方法要好得多。
WHERE '20140501' BETWEEN DateOfArrival AND DateOfDeparture
   OR '20140531' BETWEEN DateOfArrival AND DateOfDeparture
   OR DateOfArrival BETWEEN '20140501' AND '20140531'