我试图通过比较日期值来检索记录,如下所示:
declare @fromdate as date
declare @todate as date
set @fromdate='2013-04-01'
set @todate='2013-04-13'
select createdon,
convert(varchar,PhoneCall.createdon,101) as createdon,
convert(varchar,@fromdate,101) as fromdate
from
PhoneCall
where convert(varchar,PhoneCall.createdon,101) >= convert(varchar,@fromdate,101) and convert(varchar,PhoneCall.createdon,101) <= convert(varchar,@todate,101)
比较中出现了问题,我尝试过使用各种转换格式,但我没有收到正确的结果。
上面的查询是我最新的试用版,虽然它看起来不错,它没有考虑到年份的比较。因此显示的结果如下:
Createdon ConvertedCreatedOn ConvertedFromDate
2013-05-08 14:13:16.000 05/08/2013 05/01/2013
2014-05-01 17:10:03.000 05/01/2014 05/01/2013
编辑: 这是我用于报告的查询。 @fromdate和@todate是将由用户手动输入的报告参数,因此我必须确保它们与数据库日期格式具有相同的格式。
答案 0 :(得分:1)
为什么要将所有DATE字段/参数转换为VARCHAR?只需使用DATE比较:
where PhoneCall.createdon BETWEEN @fromdate AND @todate
如果您需要使用varchar,那么您应该使用102 format (yyyy.mm.dd)而不是101(mm / dd / yyyy)。在这种情况下,它可以用于将日期比较为字符串。