8

运行以下语句,MySQL 似乎把事情搞混了:

select now(), if(false, date(now()), time(now()));

| 2013-07-24 10:06:21 | 2010-06-21 00:00:00 |

if如果用文字字符串替换 的第二个参数,则该语句的行为正确:

select now(), if(false, 'Banana', time(now()));

| 2013-07-24 10:06:21 | 10:06:21 |

这是一个错误还是一些非常奇怪的怪癖?

4

1 回答 1

4

的返回类型IF必须是包含两个参数类型的数据类型。因此,如果一个参数是 aDATE而另一个是 a TIME,那么 的类型IF将是DATETIME

在简单的示例查询中这似乎没有必要,但请考虑以下内容:

SELECT IF(col1, date(col2), time(col2)) AS dt
FROM Table

结果的所有行在列中必须具有相同的数据类型dt,即使特定数据将取决于该行中的内容。

如果您只需要日期或时间,请将其转换为字符串。

于 2013-07-24T08:32:00.867 回答