2014-08-28 67 views
1

enter image description here如何根據日期條件獲取記錄?

我有一個表PersonalInformation在SQL Server 2008在這個表中有存儲用於插入記錄的日期一欄CreateDate。現在我想根據日期從表中搜索記錄。我的搜索字符串是Month-YearCreateDate是使用SQL Server的GETDATE()函數存儲的。

如果我使用格式Month-Year進行搜索,例如, March-2012我想顯示與表格記錄匹配的月份和年份,並且還顯示March-2012之前插入的記錄。

我怎麼能做到這一點?

在此先感謝。

+1

你的描述很難理解,你介意顯示它引用的代碼嗎? – Steve 2014-08-28 07:27:21

+0

我張貼我的表格結構,以便更好地理解#Steve – 2014-08-28 07:30:59

回答

0

使用DATEPART功能

select DATEPART(MM,'March 2012') --> 3 
select DATEPART(YYYY,'March 2012')--> 2012 

所以在您的查詢搜索

select * from table where DATEPART("MM" CreatedDate) = DATEPART(MM,'March 2012') AND DATEPART("YYY" CreatedDate) = DATEPART(YYY,'March 2012') 

通過這種方式,您可以根據需要選擇=或> =。

請注意,我的輸入是March 2012而不是March-2012。 對於替換字符串使用Replace函數int途中

REPLACE('March-2012','-',' ') 

您輸入的日期

select * from table where (DATEPART("MM" CreatedDate) <= DATEPART(MM,'March 2012') AND DATEPART("YYY" CreatedDate) = DATEPART(YYY,'March 2012') OR (DATEPART("YYY" CreatedDate) < DATEPART(YYY,'March 2012'))) 

之前,搜索你輸入日期後搜索

select * from table where (DATEPART("MM" CreatedDate) > DATEPART(MM,'March 2012') AND DATEPART("YYY" CreatedDate) = DATEPART(YYY,'March 2012') OR (DATEPART("YYY" CreatedDate) > DATEPART(YYY,'March 2012'))) 
+0

謝謝先生這解決了我的一半問題..但如果我用<= or > =它只顯示那些在3月份的記錄。我希望遊行前的所有記錄都應該發表。 @faby – 2014-08-28 08:34:05

+0

我編輯了我的答案。讓我知道它是否有效 – faby 2014-08-28 08:39:41

+0

謝謝老大它的工作..非常感謝@faby – 2014-08-28 09:52:48

0

選擇Tbl_Name *,其中轉換(VARCHAR,CREATEDATE,110)像'12 -10'

+0

沒有給出所需的輸出@TheTomCat – 2014-08-28 07:42:18

0

嘗試這樣的:

SELECT * FROM TableName 
WHERE 
CONVERT(varchar(10), DATENAME(MONTH, CreatedDate)) = 'March' // Passed From Parameter 
AND Year(CreatedDate) = 2014         // Passed From Parameter 
+0

以及如何獲得這些結果也存儲在2014年3月之前@Pawan – 2014-08-28 07:48:00

0

你並不需要亂用數據的字符串表示形式並使用該字符串進行比較。

我建議您解析輸入的日期爲適當DateTime對象第一:

var dt = DateTime.ParseExact("March-2012", "MMMM-yyyy", CultureInfo.InvariantCulture); 

然後使用DateTime對象與SqlDbType.DateTime一個SqlParameter,在你SqlCommand根據您CreatedDate列篩選。