我使用 SELECT DATEDIFF(DD,$StartDate, $Today)
来计算两个日期之间的天数。 $$StartDate
是 2020-11-19,$Today
是当前日期 ($Today = date("Y-m-d");
)。我得到 28 天作为不正确的天数。我做错了什么?
答案 0 :(得分:4)
要回答为什么值“错误”的实际问题,是因为它不是; 28
对于您传递的值是正确的。问题是你没有参数化。 DATEDIFF
实际上完全正常工作。您正在做的是以下内容:
SELECT DATEDIFF(DD,2020-11-19, 2021-02-01);
返回 28
。这是正确的。您所拥有的也是以下表达式的同义词:
SELECT DATEDIFF(DD,1990,2018);
SELECT DATEDIFF(DD,'19050614','19070712');
--and even
SELECT 2018 - 1990;
因为您没有正确参数化(和注入)您传递的值不是日期时间值,它是 int
s 的表达式。参数化您的查询,并传递日期和时间日期类型值,并且 SQL 可以完美地正常工作。例如:
--This wouldn't be in your SQL, but something equivilent would happen when the parameters are pass from your application
DECLARE @StartDate date = '20201119',
@Today date = '20210201';
--And the DATEDIFF function
SELECT DATEDIFF(DAY,@StartDate, @Today);
这也会返回表达式的正确值,以及您可能期望的值,74
。