在 MySQL 查询中,我尝试根据 IF()
条件选择 DATEDIFF()
或 NOW()
. MySQL 的行为在这里让我感到困惑。
这个在 phpMyAdmin 中运行的查询有一些奇怪的结果。这些值应该相同,但它们不是。
SELECT
TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), NOW()) AS `A`,
IF(FALSE, NOW(), TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), NOW())) AS `B`
A ----------------- | B -----------------
01:00:00 ---------- | 2001-00-00 00:00:00
如果我尝试这个查询,将 IF
条件的第一个选项中的 NOW()
更改为 NULL
,它会显示正确的结果对于 TIMEDIFF
。这是为什么?
SELECT
TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), NOW()) AS `A`,
IF(FALSE, NULL, TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), NOW())) AS `B`
A ----------------- | B -----------------
01:00:00 ---------- | 01:00:00
那么我的问题是:NOW()
与 NULL
如何影响 IF
返回?
最佳答案
可能是 NOW()
或其他日期函数在所有情况下都必须返回一个值,因为我正在使用 RAND()
和 测试相同的查询SQRT()
函数,但在那种情况下它返回正确的值,所以问题可能出在 NOW()
函数返回值
尝试将 NOW()
与空白 CONCAT()
一起使用,它也不会操纵您的返回值,并且它与 TRUE
和 FALSE
SELECT
TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), NOW()) AS `A`,
IF(TRUE, CONCAT(NOW()), TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), NOW())) AS `B`
或
SELECT TIMEDIFF( DATE_ADD( NOW( ) , INTERVAL 1 HOUR ) , NOW( ) ) AS `A` ,
CASE WHEN TRUE THEN TIMEDIFF( DATE_ADD( NOW( ) , INTERVAL 1 HOUR ) , NOW( ) )
ELSE CONCAT( NOW( ) )
END AS `B
都给出了正确的结果
关于php - 在 IF 条件下选择 DATEDIFF 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21011812/