2012-12-06 91 views
1

我使用varchar數據類型在SQL Server中我的起始日期和結束日期字段2005示例查詢在這裏給出:轉換爲varchar日期 - SQL服務器

*我下面DD/MM/YYYY格式日期。

select * from dbo.SubDetails 
where 
((
DATEADD(DAY,DATEDIFF(DAY, 0, convert(datetime,StartDate,105)), 0) <= 
DATEADD(DAY,DATEDIFF(DAY, 0, convert(datetime,'16/11/2012',105)), 0) 
) 
AND 
(
DATEADD(DAY, DATEDIFF(DAY, 0, convert(datetime,EndDate,105)), 0) >= 
DATEADD(DAY, DATEDIFF(DAY, 0, convert(datetime,'11/9/2012',105)), 0) 
)) 

此查詢爲我提供所有記錄,與日期範圍之間的記錄無關。 任何幫助,將不勝感激。由於

回答

0

首先是 - 不存儲日期值的VARCHAR列,如果你有 - 使用YYYYMMDD格式。 第二 - 你可以比較日期:

select * 
from dbo.SubDetails 
where 
    convert(datetime, StartDate, 105) <= convert(datetime,'16/11/2012', 105) and 
    convert(datetime, EndDate, 105) >= convert(datetime,'11/9/2012', 105) 

此外,您的查詢將返回所有數據範圍相交的給定數據範圍(2012年9月11日 - 2012年11月16日)。那是你想要做的嗎?

更新:如果需要記錄,其中StartDateEndDate月之間的9 2012年16 2012月,你可以這樣做(假設StartDate < = EndDate):

select * 
from dbo.SubDetails 
where 
    convert(datetime, StartDate, 105) >= convert(datetime,'09/11/2012', 105) and 
    convert(datetime, EndDate, 105) <= convert(datetime,'16/11/2012', 105) 
+0

嗨羅馬,感謝您即時回覆,但它仍然給我所有記錄,而不考慮數據範圍。我很抱歉,請閱讀'11/9/2012'至'9/11/2012'。 –

+0

什麼樣的數據,你期待得到什麼? –

+0

的記錄16年11月9日2012年11月之間的2012年的日期。它目前顯示所有記錄,甚至不考慮日期範圍檢查。 –

相關問題