2012-01-03 97 views
1

我想選擇如何獲得兩個日期

表1

Code Period Datefrom dateto  Value 
001 07/2011 01/07/2009 10/07/2009 100 
211 07/2009 01/07/2009 05/07/2009 200 

日期之間的值從上面的表格我要檢查datefrom和dateto之間的日期值,如果日期是在之間或等於datefrom dateto裝置,它應該返回empcode

嘗試查詢的值

SELECT Value 
FROM table1 
Where Period = '07/2009' 
and Code = '211' 
and Cast('02/07/2009' as Datetime) between datefrom and dateto 

預期輸出:

code value 
211 200 

上面的查詢顯示是空值,它應該返回200

什麼錯我的查詢?

+1

是你的列datetime或VARCHAR?您可以嘗試在where子句中使用'YYYYMMDD',以確保SQL Server不會混淆一個月和一天的情況。 – 2012-01-03 08:31:51

+0

你可以請張貼表的模式,以便我們知道數據類型?我認爲代碼和值是varchar權利? – 2012-01-03 08:33:39

回答

3

Cast('02/07/2009' as Datetime)給您帶來的2月7日在默認情況下 用這個代替

SELECT Code, Value 
FROM table1 
Where 
    Period = '07/2009' 
and Code = '211' 
and CONVERT(DATETIME, '02/07/2009', 103) between datefrom and dateto 

你,可能要轉換datefromdateto列太如果他們是VARCHAR類型的。

+0

我認爲這是二月七日:-)你不需要轉換那些列如果他們有日期時間值(而不是字符串) – 2012-01-03 08:37:43

+0

@HansKesting是的,錯過了約會,但已經寫了關於列8-) – 2012-01-03 08:39:24

0
SELECT Code, Value 
from table1 
where Period = '07/2009' 
and Code = '211' 
and DateFrom <='02/07/2009' 
and DateTo >= '02/07/2009' 
+0

錯誤!需要從英國格式轉換字符串日期。查詢是一樣的,除了選擇列表中的代碼列 – 2012-01-03 08:32:59

-1

您可以使用下面的查詢

SELECT code 
     , value 
FROM table1 
WHERE period = '07/2009' 
AND code = '211' 
AND convert(datetime,'02/07/2009',101) 
     between 
     convert(datetime,datefrom,101) and convert(datetime,dateto,101) 
+0

錯誤!日期格式是英國/法國不是美國! – 2012-01-03 09:01:08