日期比较并未考虑年份

时间:2014-05-13 08:51:30

标签: sql-server date format comparison dynamics-crm-2011

我试图通过比较日期值来检索记录,如下所示:

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是将由用户手动输入的报告参数,因此我必须确保它们与数据库日期格式具有相同的格式。

1 个答案:

答案 0 :(得分:1)

为什么要将所有DATE字段/参数转换为VARCHAR?只需使用DATE比较:

where PhoneCall.createdon BETWEEN @fromdate AND @todate

如果您需要使用varchar,那么您应该使用102 format (yyyy.mm.dd)而不是101(mm / dd / yyyy)。在这种情况下,它可以用于将日期比较为字符串。