首页 > 解决方案 > 我如何合并不同的日期类型

问题描述

我正在尝试使用下表中的默认值COALESCE()来获取最低的非日期:NULLNOW()

date1 (timestamp) | date2 (date) | date3 (timestamp)
<null>              <null>         2015-02-04 21:29:05

我试过的查询是:

SELECT coalesce(date1, timestamp(date2), date3, now()) as edited
FROM backupDB

标签: mysqldate

解决方案


@Barmar - 不,我无法重现 SQLFiddle 中的错误,我真正拥有的架构和值破坏了他们的 Java。

解决了

我必须深入挖掘表的构建方式并找到正确的模式。这是我在数据库中真正拥有的(尽管 PHPStorm 将“0000-00-00”显示为NULL):

CREATE TABLE backupDB (
  date1 TIMESTAMP NULL,
  date2 DATE DEFAULT '0000-00-00',
  date3 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);

INSERT INTO backupDB (date1, date2, date3) VALUES
(NULL, '0000-00-00', '2015-02-04 21:29:05');

所以必要的查询看起来更像这样:(随意批评和改进)

SELECT
  coalesce(date1, if(date2= '0000-00-00', null, timestamp(date2)), date3, now()) as edited
FROM backupDB

推荐阅读