我有两个输入,月份和年份。
selectedMonth = DDLMonth.SelectedItem.Value;//1
SelectedYear = DDLYear.SelectedItem.Text.Trim();//2013
我想显示特定月份和年份的预设记录,而不是仅显示日期。我想要显示注册员工
sql查询
select e.EnquiryId, RegistrationNumber, Name
from Branch as b
left join Enq as e on b.Enqui = e.Enqu
where Reg = @RegNo
and Pay=Cheque
我需要选择月份= 1年份= 2015年。如果这个在付款日期和检查。类似的东西:
where Registratio = @RegNo
and Payment(month) = selectedMonth
and payment(year) = selectedyear
and chequere(month) = selected Month
and chequere(year) = selected year
我的列号格式和付款日期采用日期时间格式。
答案 0 :(得分:3)
执行此操作的最有效方法是在应用程序代码中构建日期:
selectedMonth = DDLMonth.SelectedItem.Value;//1
SelectedYear = DDLYear.SelectedItem.Text.Trim();//2013
var date = new DateTime(int.Parse(SelectedYear), int.Parse(selectedMonth), 1);
然后将此日期作为参数传递给您的查询:
where RegistrationNumber = @RegNo
and PaymentDate >= @Date
and paymentdate < DATEADD(MONTH, 1, @Date)
and chequereceiveddate >= @Date
and chequerecieveddate < DATEADD(MONTH, 1, @Date);
这使您的查询sargable,并且意味着您无需在列上执行DATEPART()
功能。
答案 1 :(得分:0)
GarethD提供了最佳解决方案,但另一种方法是使用DATEPART。
示例:
where RegistrationNumber = @RegNo
and DATEPART(month, PaymentDate) = selectedMonth
and DATEPART(year, PaymentDate) = selectedYear
and DATEPART(month, chequerecieveddate) = selectedMonth
and DATEPART(year, chequerecieveddate) = selectedYear
这只是举一个DATEPART()的例子,如果您想在某些月份找到平均付款,那么这将更有用。