次のクエリがあります。
select top 100 pId from Product
inner join Code on cFKId = pId
where year(pToDate) = convert(int, substring(@term,1,4))
and month(pToDate) = convert(int, substring(@term,5,2))
and codeValue = @value
変数@term
は avarchar
であり、フォームYYYYMM
は例外でpToDate
はなく、adatetime
です。
このクエリが行うことになっているのはProduct
、 の最初の 4 桁と同じ年とterm
の最後の 2 桁と同じ月を持つテーブルから最初の 100 個の ID を取得すること@term
です。
私も試してみましたcast(substring(@term,1,4) to int)
。
ここでは、変数value
は重要ではありません。
月と年の両方の値と変数の値は正しいです@term
。問題は、データベースに何百もの値があるにもかかわらず、空のクエリが返されることです。
変換の値を出力すると、
2008 | 8
2008 | 9
2008 | 10
...などのような表が表示されます。
これらは、年と月だけを書いた場合に得られる正確な値です。
どこが間違っていて、解決策は何ですか?