为什么我不能匹配破折号之间的值? 例如:2016-05-20,当我尝试使用类似功能匹配数字5时,即使05也没有结果,但如果我将匹配2016年和20,则会产生结果。我如何在日期中匹配月份?
public IEnumerable<NCABal> FindByNCABalDate(Int32 Month)
{
var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE NCABalDate LIKE '%"+ @Month +"%'";
return this._db.Query<NCABal>(query).ToList();
}
当我输入5或05时,不会显示任何结果。
答案 0 :(得分:5)
//for searching month
var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE Datepart(mm,NCABalDate) = 5";
//for searching year
var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE Datepart(yyyy,NCABalDate) = 2016";
//for searching day
var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE Datepart(dd,NCABalDate) = 20";
//for searching month,year and day
var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE Datepart(mm,NCABalDate) = 5 and Datepart(yyyy,NCABalDate) = 2016 and Datepart(dd,NCABalDate) = 20";
答案 1 :(得分:1)
使用Convert(nvarchar(20),NCABalDate, 20) LIKE '%"+ @Month +"%'
这会将你的datetime列转换为nvarchar,就像它可以正常工作一样。因此,您的查询将变为
var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE Convert(nvarchar(20),NCABalDate, 20) LIKE '%"+ @Month +"%'";
答案 2 :(得分:0)
月份的值将作为值的一个字符输入&lt; 10,因为你没有将它格式化为两个字符。尝试:
var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE NCABalDate LIKE '%"+ Month.ToString("D2") +"%'";