簡體   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