2016-05-20 7 views
1

ダッシュの間に値を一致させることができないのはなぜですか? 例: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

期待される出力は何ですか? –

+0

'NCABALDATE'のデータ型は何ですか? –

答えて

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"; 
+0

ありがとうございます。これはシンプルですが非常に効果的です:) – James

+0

歓迎です@ジェームズ –

+0

これは、データベース上で少し課税されるかもしれない行の3つのクエリを実行することに注意してください。 – jitendragarg

0

月の値は、2文字にフォーマットされていないので、値<の1文字として入ります。試してみてください:

var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE NCABalDate LIKE '%"+ Month.ToString("D2") +"%'"; 
1

使用Convert(nvarchar(20),NCABalDate, 20) LIKE '%"+ @Month +"%'

これは正常に動作しますように、その上にnvarchar型にあなたのdatetime列を変換します。だから、あなたのクエリが

var query = @"SELECT * FROM [dbo].[NCA_Balance] WHERE Convert(nvarchar(20),NCABalDate, 20) LIKE '%"+ @Month +"%'";

+0

このコードも機能します。お気軽に:) – James

+0

これは文字列全体の値を検索します。あなたが10ヶ月間探している場合は、2010年も選択されます。 – jitendragarg

関連する問題