Datediff 函数()给了我错误的答案

时间:2021-02-01 19:52:00

标签: php sql-server

我使用 SELECT DATEDIFF(DD,$StartDate, $Today) 来计算两个日期之间的天数。 $$StartDate 是 2020-11-19,$Today 是当前日期 ($Today = date("Y-m-d");)。我得到 28 天作为不正确的天数。我做错了什么?

1 个答案:

答案 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;

因为您没有正确参数化(和注入)您传递的值不是日期时间值,它是 ints 的表达式。参数化您的查询,并传递日期和时间日期类型值,并且 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

相关问题