需要比较日期和时间日期之间的年份

时间:2017-05-09 15:07:24

标签: sql-server

在数据库中,我有一个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'.

请你帮忙解决这个问题,以便动态地得到结果。

2 个答案:

答案 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))