在日期范围之间获取行在SQL Server中不起作用

SST*_*SST 0 sql sql-server sql-server-2008-r2

在SQL Server 2008R2中,在两个日期之间提取数据不起作用.

我使用以下代码从INVOICE表中获取行和CREATED_DATE之间的行,这是我发送到存储过程的参数.@startdate@enddate

Select * 
from INVOICES INV 
where CONVERT(Varchar(10), INV.CREATED_DATE, 105)
      BETWEEN CONVERT(VARCHAR(10), @startdate, 105) 
          AND CONVERT(VARCHAR(10), @enddate, 105)
Run Code Online (Sandbox Code Playgroud)

它工作不正常,让我疯了

我做错了什么?..

Mic*_*aga 8

select * from 
invoices inv 
where inv.created_date >= dateadd(dd, 0, datediff(dd, 0, @startdate))
    and inv.created_date < dateadd(dd, 1, datediff(dd, 0, @enddate))
Run Code Online (Sandbox Code Playgroud)

首先,不要你的开始/结束和列的日期转换为varchar,如果这样做,请记住105(返回dd-mm-yyyy)不具有可比性,112(返回yyyymmdd)会更好(当你对日期感兴趣时)仅部分).但我所说的最好不要转换,只是比较日期.

补充:

并且很少解释:dateadd(dd, 0, datediff(dd, 0, @startdate))- 仅dateadd(dd, 1, datediff(dd, 0, @startdate))返回datetime的日期部分,- 仅返回第二天的日期部分.

查询返回包含参数的所有行(无论小时数).