[英]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中是否需要AND
或OR
,你想包含交叉点吗?)
很抱歉转换评论,我以为是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.