在数据库中,我有一个varchar字段,只保存日期为2016/10的日期和月份。现在在asp.net中,我选择了2个日期,并希望在这两个日期之间获取记录。我写了一个SP来检索它,如下所示
select *
from Bulk_Requires
where CreatedDate between convert(varchar(15),datepart(YYYY,@startdate))
+ '/'
+ convert(varchar(15),datepart(MM,@startdate))
and
convert(varchar(15),datepart(YYYY,@enddate))
+ '/'
+ convert(varchar(15),datepart(MM,@enddate)))
但我错误地得到了输出。当我尝试以下查询时它工作正常(静态日期)。
select * from Bulk_Requires where CreatedDate between '2016/01' and '2016/05'.
请你帮忙解决这个问题,以便动态地得到结果。
答案 0 :(得分:0)
解决此问题的最佳方法是修复数据库,但它是一个遗留系统,因此始终无法实现。您还应该避免在日期函数中使用快捷方式,因为它们很难记住,实际的名称使它更加清晰。
您可以稍微调整一下您的查询,这样您每个月都会得到2个字符。
select *
from Bulk_Requires
where CreatedDate between convert(varchar(15),datepart(Year, @startdate))
+ '/'
+ right('0' + convert(varchar(15),datepart(Month, @startdate)), 2)
and
convert(varchar(15),datepart(Year, @enddate))
+ '/'
+ right('0' + convert(varchar(15),datepart(Month, @enddate))), 2)
答案 1 :(得分:0)
你可以进行int转换并检查如下
select *
from Bulk_Requires
where Convert(int,replace( CreatedDate,'/','')) between Convert(int,CONVERT(varchar(6), @Startdate,112))
and Convert(int,CONVERT(varchar(6), @enddate,112))