3

为什么COALESCE(date1,date2)返回Blob(二进制)?两列都是 type 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是 nulldate_purchased应该返回。

但即使有多个记录的两个日期都不为空,查询也只会返回Blob. 如何获得正确的最后日期?

编辑:在SQL-Fiddle上,它不能用 MySql 5.1.61 重现(我在 5.0.51 上)。

4

2 回答 2

2

这可能是一个已修复的错误:bug-35662

[2008 年 3 月 28 日 22:44] 帕特里克·克鲁斯

描述:在5.0.51a 上为 Windows
COALESCE(date, date) XP 32 位返回 varbinary (仅测试过这种风格)

COALESCE(date,date)在 Mac OS 上返回日期

…………
_
_

[2008 年 3 月 31 日 17:41] Omer BarNir
该错误已在 5.0.52 中修复,并且在测试 5.0.56 时未观察到 - 关闭

于 2012-12-07T12:48:05.947 回答
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;
于 2012-12-07T12:00:17.440 回答