为什么COALESCE(date1,date2)
会返回Blob
(二进制)?这两列都是DATETIME
类型。
这是完整的SQL查询:
SELECT COALESCE( last_modified, date_purchased )As LastModifiedOrPurchased
FROM Orders
ORDER BY COALESCE( last_modified, date_purchased )DESC
LIMIT 1;
我通常使用SQL-Server作为rdbms但需要编写同步工具。现在我想选择两个日期之一。如果last_modified
为null,则应返回date_purchased
。
但即使有多个记录,其中两个日期都不为空,查询只返回Blob
。如何获得正确的最后日期?
编辑:在SQL-Fiddle上,使用MySql 5.1.61无法重现(我在5.0.51上)。
答案 0 :(得分:2)
这可能是一个已修复的错误: bug-35662
[2008年3月28日22:44] Patrick Crews
描述:
COALESCE(date, date)
在 5.0.51a for Windows XP 32bit(仅测试此风格)上返回varbinary
COALESCE(date,date)
在Mac OS上返回日期...
...
......[2008年3月31日17:41] Omer BarNir
该错误已在5.0.52中修复,在测试5.0.56时没有观察到 - 关闭
答案 1 :(得分:1)
我仍然不知道为什么会在MySql Workbench(以及MS Visual Studio)中发生这种情况。但我找到了一个解决方法。我只是将结果转换为DATETIME
,它按预期工作:
SELECT CAST(COALESCE( last_modified, date_purchased )AS DATETIME)As LastModifiedOrPurchased
FROM Orders
ORDER BY COALESCE( last_modified, date_purchased )DESC
LIMIT 1;
编辑:正如杰克评论的那样,IFNULL
也有效:
SELECT IFNULL( last_modified, date_purchased )As LastModifiedOrPurchased
FROM Orders
ORDER BY IFNULL( last_modified, date_purchased )DESC
LIMIT 1;