繁体   English   中英

如何选择SQL DB中存在的来自和到目前为止的行

[英]How to select a row where from and to date are exist in SQL DB

你好我有一个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

输出应该是这样的:

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

我的选择语句过滤得很多,我无法看到这两个日期之间的所有日期。

我错过了什么吗?

在此先感谢您的帮助

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

假设参数已经是datetimes

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

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

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

很抱歉转换评论,我以为是varchar转换的datetime。 但是从您输入的日期开始,您给出了两个日期和表格,每个房间有两个日期。 这实际上是混淆了日期和日期的内容。 从您的示例输出中,您应该使用or在两个过滤器之间。 这里 祝好运。

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

代替

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM