如何选择一排,其中来自和日期均存在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语句过滤器多,我不能看到这两个日期之间的所有日期。
我错过了什么?
在此先感谢您的帮助
对不起转换评论,我认为这是日期时间为varchar转换。 但是从你的输入日期,你给了两个日期和表格有两个日期为每个房间。实际上,这是从日期到日期的混淆。从您的示例输出中,您应该在两个过滤器之间使用or
。看看here。 祝你好运。
select * from table1
where (convert(datetime, @from, 101) between fromdate and todate)
or (convert(datetime, @to, 101) between fromdate and todate)
我必须转换,因为生病得到一个错误:convert varchar to datetime超出范围值... – 2013-02-11 09:10:59
它在网站上工作,但不在我的sql语句。我认为日期转换有一个问题。它有时会说在将varchar转换为datetime时出现超出范围错误 – 2013-02-11 09:41:47
什么是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 AND
或OR
,你想包括交叉?)
我认为我的日期时间转换有问题。日期正在过滤,但不是时间。真正的参数是日期时间,但我想在ms sql中尝试它,然后在我的代码中添加语句。 – 2013-02-11 09:26:35
转换风格= 101有问题。我还可以使用什么? – 2013-02-11 09:28:35
@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)
这些日期列的类型是什么Datetime? – 2013-02-11 09:04:06
什么是'BESETZT_BIS',你没有显示它。 – 2013-02-11 09:04:29
是的,他们是日期时间,对不起besetzt_bis是TODATE。 – 2013-02-11 09:05:36