COALESCE两个日期返回二进制?

时间:2012-12-07 11:12:53

标签: mysql sql mysql5

为什么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上)。

2 个答案:

答案 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;