运行下面的语句,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 |
这是一个错误还是一些非常奇怪的怪癖?
最佳答案
IF
的返回类型必须是包含两个参数类型的数据类型。因此,如果其中一个参数是 DATE
,另一个是 TIME
,则 IF
的类型将为 DATETIME
.
这在简单的示例查询中似乎没有必要,但请考虑如下内容:
SELECT IF(col1, date(col2), time(col2)) AS dt
FROM Table
结果的所有行在 dt
列中必须具有相同的数据类型,即使特定数据将取决于该行中的内容也是如此。
如果您只需要日期或时间,请将其转换为字符串。
关于mysql - 获取日期时间的日期和时间(MySQL 中的错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828561/