php - 在 IF 条件下选择 DATEDIFF 时出错

标签 php mysql sql

在 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() 一起使用,它也不会操纵您的返回值,并且它与 TRUEFALSE

 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/

相关文章:

Javascript 表单提交打开新窗口选项卡,然后重定向父页面

python - 内爆列表以在 Python MySQL IN 子句中使用

php - 与 NULL 值的表比较

sql - SQL在表达式上以(使用`LIKE`)开始

php - CakePHP:限制与模型关联的字段

php - 付款被拒绝后恢复 magento 报价

php - 如何显示 youtube 视频缩略图

MySQL,优化子查询

php - 高级搜索 PHP

sql - SQL Server 如何处理存储过程中与事务有关的语句?