短划线之间的值不匹配

时间:2016-05-20 07:11:09

标签: c# sql-server

为什么我不能匹配破折号之间的值? 例如: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时,不会显示任何结果。

3 个答案:

答案 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") +"%'";