0

您好,我有一个如下所示的 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

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

例子:

形成日期:2012-11-29 11:50:00.000
到日期:2012-11-29 13:46:00.000

输出应该是这样的:

预订室:

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 Statement 过滤太多,我看不到这两个日期之间的所有日期。

我错过了什么吗?

在此先感谢您的帮助

4

3 回答 3

1

你为什么要使用 varchars 作为日期时间?使用 sql-parameters 来避免 sql-injection 和转换问题。

假设参数已经是datetimes.

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

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

(我不确定你是否需要ANDOR在 -Where子句中,你想包括交叉点吗?)

于 2013-02-11T09:06:24.333 回答
1

抱歉转换评论,我认为这是日期时间到 varchar 转换。但是从您输入的日期开始,您给出了两个日期,并且每个房间都有两个日期。实际上令人困惑的是这些从日期到日期是什么。从您的示例输出中,您应该or在两个过滤器之间使用。看这里。祝你好运。

select * from table1
where (convert(datetime, @from, 101) between fromdate and todate)
or (convert(datetime, @to, 101) between fromdate and todate)
于 2013-02-11T09:07:10.370 回答
0

代替

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)

于 2013-02-11T09:06:26.877 回答