2011-05-05 84 views
2

我有一個.NET 2010應用程序,它針對的是SQL數據庫。在應用程序方面,用戶可以搜索開始日期和結束日期。這些機器人只是月+年。然後我格式化它們,以便它們是完整的日期。所以,當他們去到存儲過程,他們會是這樣的......如何在SQL Where子句中格式化日期?

開始時間:2011/1/1 結束日期:5/31/2011

但是在DB的日期被打破分成3個int字段,月份,日期&年,......其中日期可能會或可能不會被填入(如果沒有,則爲0)。運行此查詢時,總是默認爲1。因此,如果在數據庫中值分別爲月= 3,天= 0年= 2011,我想在SQL語句呈現爲

凡FORMATTEDDATEHERE「1/1/2011」和「5/31/2011」

之間

我只是無法弄清楚如何在where子句中格式化sql字段。

+0

哪些數據類型的列月,日和年? – Lamak 2011-05-05 13:40:10

+0

所有3都是整數 – MalcolmK 2011-05-05 13:41:49

回答

0

您可以在WHERE子句EG中使用datadd函數來構建日期。

SELECT ... 
WHERE DATEADD(Day, field_days-1, DATEADD(Month, field_months-1, DATEADD(Year, field_years-1900, 0))) BETWEEN '1/1/2011' AND '5/31/2011' 

只需將field_days,field_months,field_years替換爲表中的int字段爲天,月和年。這將返回日期範圍內的所有記錄。

這是你所需要的?

0

你有沒有嘗試類似

WHERE CONVERT(DATETIME, 
    CONVERT(VARCHAR(4), [c_year]) + '/' 
    + CONVERT(VARCHAR(2), [c_month]) + '/' 
    + CONVERT(VARCHAR(2), [c_day])) 
BETWEEN '2011/1/1' AND '2011/5/31' 

希望它可以幫助

+0

當我這樣做時,我得到以下內容......「多部分標識符FIELDHERE不受約束。」我應該提到這是一個動態查詢。 – MalcolmK 2011-05-05 14:17:43

+0

你能發佈完整的查詢嗎? – Elian 2011-05-05 20:53:13

0
WHERE CAST(Year AS varchar) + RIGHT(100 + Month, 2) + 
     RIGHT(100 + COALESCE(NULLIF(Day, 0), 1), 2) BETWEEN ...