2014-08-28 66 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列筛选。