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)
它工作不正常,让我疯了
我做错了什么?..
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的日期部分,- 仅返回第二天的日期部分.
查询返回包含参数的所有行(无论小时数).