如何选择一排,其中来自和日期均存在SQL数据库

问题描述:

你好我有一个看起来像这样的SQL表:如何选择一排,其中来自和日期均存在SQL数据库

RESERVATIONROOM: 

ID   NAME   FROMDATE      TODATE  

5   Room1  2012-11-29 11:46:00.000   2012-11-29 12:45:00.000 
6   Room1  2012-11-29 12:55:00.000   2012-11-29 14:20:00.000 
7   Room1  2012-11-29 15:00:00.000   2012-11-29 16:42:00.000 

我有一个从和到日期,我想选择所有这两个日期之间的房间。

例子:

form date: 2012-11-29 11:50:00.000
to date: 2012-11-29 13:46:00.000

输出应该是这样的:

RESERVATIONROOM:

ID   NAME   FROMDATE      TODATE  

5   Room1  2012-11-29 11:46:00.000   2012-11-29 12:45:00.000 
6   Room1  2012-11-29 12:55:00.000   2012-11-29 14:20:00.000 

这是我到目前为止有:

SELECT* 
FROM RESERVATIONROOM 
WHERE FROMDATE BETWEEN CONVERT(DATETIME,'2012-11-29 11:50:00.000',101) AND CONVERT(DATETIME,'2012-11-29 13:46:00.000',101) 
AND TODATE < CONVERT(DATETIME,'2012-11-29 13:46:00.000',101) 
ORDER BY FROMDATE ASC 

我的Select语句过滤器多,我不能看到这两个日期之间的所有日期。

我错过了什么?

在此先感谢您的帮助

+0

这些日期列的类型是什么Datetime? – 2013-02-11 09:04:06

+0

什么是'BESETZT_BIS',你没有显示它。 – 2013-02-11 09:04:29

+0

是的,他们是日期时间,对不起besetzt_bis是TODATE。 – 2013-02-11 09:05:36

对不起转换评论,我认为这是日期时间为varchar转换。 但是从你的输入日期,你给了两个日期和表格有两个日期为每个房间。实际上,这是从日期到日期的混淆。从您的示例输出中,您应该在两个过滤器之间使用or。看看here。 祝你好运。

select * from table1 
where (convert(datetime, @from, 101) between fromdate and todate) 
or (convert(datetime, @to, 101) between fromdate and todate) 
+0

我必须转换,因为生病得到一个错误:convert varchar to datetime超出范围值... – 2013-02-11 09:10:59

+0

它在网站上工作,但不在我的sql语句。我认为日期转换有一个问题。它有时会说在将varchar转换为datetime时出现超出范围错误 – 2013-02-11 09:41:47

+0

什么是dateformat?可能是'dmy'。请在选择查询前添加'set dateformat mdy'。 – 2013-02-11 09:45:34

为什么您使用的日期时间,在所有的VARCHAR处理?使用sql-parameters来避免sql注入和转换问题。

假设参数已经是datetimes

您可以使用两列BETWEEN两个参数:

SELECT * 
FROM RESERVATIONROOM 
WHERE @dateFrom BETWEEN FROMDATE AND TODATE 
OR @dateTO BETWEEN FROMDATE AND TODATE 

(我不知道,如果你需要在Where -clause ANDOR,你想包括交叉?)

+0

我认为我的日期时间转换有问题。日期正在过滤,但不是时间。真正的参数是日期时间,但我想在ms sql中尝试它,然后在我的代码中添加语句。 – 2013-02-11 09:26:35

+0

转换风格= 101有问题。我还可以使用什么? – 2013-02-11 09:28:35

+0

@ErayGeveci:您可以在当前时间和['DATADD(day,10,GetDate())'](http://msdn.microsoft.com/zh-cn/library/ms186819)中使用'GetDate aspx)为您的示例数据获取不同的日期时间。 – 2013-02-11 09:40:00

而不是

WHERE FROMDATE BETWEEN CONVERT(DATETIME,'2012-11-29 11:50:00.000',101) AND CONVERT(DATETIME,'2012-11-29 13:46:00.000',101)

使用

WHERE FROMDATE > CONVERT(DATETIME,'2012-11-29 11:50:00.000',101)