2012-12-07 62 views
3

为什么COALESCE(date1,date2)返回Blob(二进制)?两列均为DATETIMECOALESCE两个日期返回二进制?

下面是完整的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为空,则应返回date_purchased

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

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

+0

你在命令行上试过了吗?或者你用什么来激发查询?那些列的数据类型是什么? – fancyPants

+0

@tombom:我已经从MySql workbench 5.2.34和Visual Studio中试过了。顺便说一句,我在Windows 2008. –

+0

是的,我会想知道,如果它是可重现的。很多客户端在正确显示数据时遇到问题,或者认为他们会为用户提供一个帮助,即,我正在使用Toad,它不会正确显示“tinyint”(然后它只使用复选框),NULL值不会完全显示,所以你不能分辨它是NULL还是空字符串。尽管如此,我仍然可以推荐蟾蜍。问题是你的客户! – fancyPants

回答

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; 
2

这可能是已修正了一个错误:bug-35662 [2008年03月28 22点44]

帕特里克克鲁斯

说明:
COALESCE(date, date)回报VARBINARY上5.0.51a适用于Windows XP 32位(仅测试了这味)

​​返回日期的Mac OS

...
...
。 ..

[31 Mar 2008 17:41] Omer BarNir
该错误被修正为5.0.52,在测试5.0.56时没有被观察到 - 关闭