我在SQL Server 2008中有一个表PersonalInformation
。在此表中有一列CreateDate
,用于存储插入记录的日期。现在我想根据日期从表中搜索记录。我的搜索字符串类似于Month-Year
,CreateDate
使用SQL Server的GETDATE()
函数存储。
如果我使用Month-Year
格式进行搜索,例如March-2012
我希望显示与表记录匹配的月份和年份,并且还会在March-2012
显示之前插入记录。
我怎么能实现这个目标?
提前致谢。
答案 0 :(得分:0)
从Tbl_Name中选择*,其中Convert(varchar,createDate,110)就像'12 -10'
答案 1 :(得分:0)
尝试这样:
SELECT * FROM TableName
WHERE
CONVERT(varchar(10), DATENAME(MONTH, CreatedDate)) = 'March' // Passed From Parameter
AND Year(CreatedDate) = 2014 // Passed From Parameter
答案 2 :(得分: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函数以他的方式
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')))
答案 3 :(得分:0)
您不需要处理数据的字符串表示,并使用该字符串进行比较。
我建议您首先将输入日期解析为正确的DateTime
对象:
var dt = DateTime.ParseExact("March-2012", "MMMM-yyyy", CultureInfo.InvariantCulture);
然后在您的SqlParameter
中使用此DateTime对象作为SqlDbType.DateTime
SqlCommand
CreatedDate
,根据您的{{1}}列进行过滤。